Есть возможность скрыть версию, чтобы она отображала только nginx, но есть ли способ скрыть и ее, чтобы она ничего не показывала или не меняла заголовок?
Есть возможность скрыть версию, чтобы она отображала только nginx, но есть ли способ скрыть и ее, чтобы она ничего не показывала или не меняла заголовок?
Ответы:
Как и Apache, это быстрое редактирование исходного кода и повторная компиляция. С сайта Calomel.org :
Строка Server: - это заголовок, который отправляется обратно клиенту, чтобы сообщить ему, какой тип http-сервера вы используете и, возможно, какую версию. Эта строка используется такими местами, как Alexia и Netcraft, для сбора статистики о том, сколько и какого типа веб-серверы находятся в Интернете. Для подтверждения автора и статистики для Nginx мы рекомендуем оставить эту строку как есть. Но в целях безопасности вы можете не захотеть, чтобы люди знали, что вы запускаете, и вы можете изменить это в исходном коде. Отредактируйте исходный файл,
src/http/ngx_http_header_filter_module.c
посмотрев строки 48 и 49. Вы можете изменить String на все, что захотите.
## vi src/http/ngx_http_header_filter_module.c (lines 48 and 49)
static char ngx_http_server_string[] = "Server: MyDomain.com" CRLF;
static char ngx_http_server_full_string[] = "Server: MyDomain.com" CRLF;
Правка от марта 2011 года: Подсказки к Flavius ниже за указание на новую опцию, заменяющую стандартный HttpHeadersModule Nginx на разветвленный HttpHeadersMoreModule . Перекомпиляция стандартного модуля по-прежнему является быстрым решением и имеет смысл, если вы хотите использовать стандартный модуль и не будете часто менять строку сервера. Но если вы хотите большего, HttpHeadersMoreModule - это сильный проект, который позволяет вам делать все виды черной магии во время выполнения с вашими заголовками HTTP.
r->headers_out.server
.
Если вы используете nginx для проксирования серверного приложения и хотите, чтобы серверная часть рекламировала свой собственный Server:
заголовок без его перезаписи nginx, вы можете войти в свою server {…}
строфу и установить:
proxy_pass_header Server;
Это убедит nginx оставить этот заголовок в покое и не перезаписывать значение, установленное серверной частью.
Последнее обновление было некоторое время назад, поэтому вот что у меня сработало на Ubuntu:
sudo apt-get update
sudo apt-get install nginx-extras
Затем добавьте следующие две строки в http
раздел nginx.conf
, который обычно находится в /etc/nginx/nginx.conf:
sudo nano /etc/nginx/nginx.conf
server_tokens off; # removed pound sign
more_set_headers 'Server: Eff_You_Script_Kiddies!';
Также не забудьте перезапустить nginx с sudo service nginx restart
.
more_set_headers 'Server: ';
Просто отредактируйте /etc/nginx/nginx.conf и удалите комментарий из
#server_tokens off;
Найдите раздел http .
Это очень просто: добавьте эти строки в раздел сервера:
server_tokens off;
more_set_headers 'Server: My Very Own Server';
nginx-extra
этот модуль.
Есть специальный модуль: http://wiki.nginx.org/NginxHttpHeadersMoreModule
Этот модуль позволяет вам добавлять, устанавливать или очищать любой заголовок вывода или ввода, который вы укажете.
Это расширенная версия стандартных заголовков модуль , поскольку он обеспечивает больше утилита , как сброс или очистку «заголовки встроенных» , как
Content-Type
,Content-Length
, иServer
.Он также позволяет вам указать необязательные критерии кода состояния HTTP с помощью
-s
параметра и необязательные критерии типа содержимого с помощью-t
параметра при изменении выходных заголовков с помощью директив more_set_headers и more_clear_headers ...
--add-module=/path-to-headers-more-nginx-module
Установить Nginx Extras
sudo apt-get update
sudo apt-get install nginx-extras
Сведения о сервере можно удалить из ответа, добавив следующие две строки в nginx.conf (в разделе http)
more_clear_headers Server;
server_tokens off;
yum install nginx-extras
не работает - я полагаю, это работает на Debia / Ubuntu и т apt-get
. Д. С.)
Если вы не против просто изменить заголовок на другую строку из пяти букв или меньше, вы можете просто исправить двоичный файл.
sed -i 's/nginx\r/thing\r/' `which nginx`
Что как решение имеет несколько заметных преимуществ. А именно, что вы можете разрешить управление версиями nginx с помощью диспетчера пакетов (то есть без компиляции из источника), даже если nginx-extras недоступны для вашего дистрибутива, и вам не нужно беспокоиться о каких-либо дополнительных код чего-то вроде nginx-extras уязвим.
Конечно, вы также захотите установить опцию server_tokens off
, чтобы скрыть номер версии или исправить эту строку формата.
Я говорю «пять букв или меньше», потому что, конечно, вы всегда можете заменить:
nginx \ r \ 0
с участием
боб \ г \ 0 \ г \ 0
оставив последние два байта без изменений.
Если вам действительно нужно более пяти символов, вы захотите оставить server_tokens включенным и заменить (немного более длинную) строку формата, хотя опять же существует верхний предел этой длины, налагаемый длиной строки формата - 1 (для возврат каретки).
... Если ничто из вышеперечисленного не имеет для вас смысла или вы никогда раньше не исправляли бинарный файл, возможно, вам стоит отказаться от этого подхода.
sed
команду выше, `which nginx`
часть возвращает путь к двоичному файлу, а sed
команда выполняет замену байта.
nginx
чтобы изменения вступили в силу. Все что сказано? Я призываю вас не использовать один из других ответов. Если все, о чем я говорю, вам еще не знакомо, и вы не знаете, для чего предназначен этот /etc
каталог, то подобный взлом довольно опасен.
Единственный способ - изменить файл src / http / ngx_http_header_filter_module.c. Я изменил nginx в строке 48 на другую строку.
Что вы можете сделать в файле конфигурации nginx, так это отключить server_tokens . Это предотвратит печать номера версии nginx.
Чтобы проверить, попробуйте curl -I http://vurbu.com/ | grep сервер
Он должен вернуться
Server: Hai
Прочитав ответ Парфянского выстрела, я копаюсь в /usr/sbin/nginx
двоичном файле. Потом я обнаружил, что файл содержит эти три строки.
Server: nginx/1.12.2
Server: nginx/1.12.2
Server: nginx
В основном первые два из них предназначены для server_tokens on;
директивы (включая версию Сервера). Затем я изменяю критерии поиска, чтобы они соответствовали этим строкам в двоичном файле.
sed -i 's/Server: nginx/Server: thing/' `which nginx`
Покопавшись дальше, я обнаружил, что сообщение об ошибке, созданное nginx, также включено в этот файл.
<hr><center>nginx</center>
Их три, один без версии, два с версией. Поэтому я запускаю следующую команду, чтобы заменить строку nginx в сообщении об ошибке.
sed -i 's/center>nginx/center>thing/' `which nginx`
/usr/sbin
папки, дает следующее:sed: can't read is: No such file or directory
Согласно документации nginx он поддерживает настраиваемые значения или даже исключение:
Syntax: server_tokens on | off | build | string;
но, к сожалению, только с коммерческой подпиской :
Кроме того, в рамках нашей коммерческой подписки, начиная с версии 1.9.13, подпись на страницах с ошибками и значение поля заголовка ответа «Сервер» могут быть заданы явно с помощью строки с переменными. Пустая строка отключает выдачу поля «Сервер».
Пакет Nginx-extra устарел.
Поэтому теперь у меня сработало следующее, поскольку я пытался установить различные пакеты more_set_headers 'Server: My Own Server';
Вы можете просто сделать следующее, и информация о сервере или версии не будет отправлена обратно
server_tokens '';
если вы просто хотите удалить номер версии, это работает
server_tokens off;
Я знаю, что пост довольно старый, но я нашел простое решение, которое работает с дистрибутивом на основе Debian без компиляции nginx из исходников.
Сначала установите пакет nginx-extras
sudo apt установить nginx-extras
Затем загрузите модуль nginx http headers more, отредактировав nginx.conf и добавив следующую строку внутри блока сервера
load_module modules / ngx_http_headers_more_filter_module.so;
Как только это будет сделано, у вас будет доступ к директивам more_set_headers и more_clear_headers.
Вы спрашиваете о значении заголовка сервера в ответе? Вы можете попробовать изменить это с помощью директивы add_header, но я не уверен, что это сработает. http://wiki.codemongers.com/NginxHttpHeadersModule