Есть возможность скрыть версию, чтобы она отображала только 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