Как изменить заголовок сервера, возвращаемый nginx? - PullRequest
126 голосов
/ 29 октября 2008

Существует возможность скрыть версию, чтобы она отображала только nginx, но есть ли способ скрыть ее, чтобы она ничего не показывала или не меняла заголовок?

Ответы [ 12 ]

128 голосов
/ 13 февраля 2012

Если вы используете nginx для прокси серверного приложения и хотите, чтобы сервер объявлял свой собственный заголовок Server: без перезаписи nginx, вы можете зайти в раздел server {…} и установить:

proxy_pass_header Server;

Это убедит nginx оставить этот заголовок в покое, а не переписывать значение, установленное серверной частью.

67 голосов
/ 04 ноября 2015

Последнее обновление было некоторое время назад, поэтому вот что у меня сработало в 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.

56 голосов
/ 29 октября 2008

Как и Apache, это быстрое редактирование исходного кода и перекомпиляция. От Calomel.org :

Сервер: строка является заголовком, который отправляется обратно клиенту, чтобы сказать им какой тип http сервера ты работает и, возможно, какая версия. Эта строка используется в таких местах, как Алексию и Неткрафт собирать статистика о том, сколько и из чего тип веб-сервера живут на Интернет. Поддержать автора и статистику по Nginx рекомендуем сохраняя эту строку как есть. Но для безопасность вы не можете хотеть, чтобы люди знаю, что вы бежите, и вы можете изменить это в исходном коде. редактировать исходный файл src/http/ngx_http_header_filter_module.c при взгляде на строки 48 и 49. Вы можете изменить строку на все, что вы хочу.

## 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 г. edit: Подсказки к Flavius ​​ниже для указания новой опции, заменив стандартный Nginx HttpHeadersModule на раздвоенный HttpHeadersMoreModule . Перекомпиляция стандартного модуля - все еще быстрое решение, и имеет смысл, если вы хотите использовать стандартный модуль и не будете часто менять строку сервера. Но если вам нужно больше, HttpHeadersMoreModule - сильный проект, позволяющий вам выполнять всякую чёрную магию во время выполнения с вашими HTTP-заголовками.

37 голосов
/ 15 ноября 2011

Простой, отредактируйте /etc/nginx/nginx.conf и удалите комментарий из

#server_tokens off;

Поиск по разделу http .

31 голосов
/ 11 мая 2014

Все очень просто: добавьте эти строки в раздел сервера:

server_tokens off;
more_set_headers 'Server: My Very Own Server';
25 голосов
/ 17 февраля 2010

Есть специальный модуль: http://wiki.nginx.org/NginxHttpHeadersMoreModule

Этот модуль позволяет добавлять, устанавливать или очищать любой указанный вами выходной или входной заголовок.

Это расширенная версия стандартного модуля headers , поскольку она предоставляет больше утилит, таких как сброс или очистка «встроенных заголовков», таких как Content-Type, Content-Length и Server.

Он также позволяет указывать необязательные критерии кода состояния HTTP с помощью параметра -s и необязательные критерии типа содержимого с использованием параметра -t при изменении выходных заголовков с помощью more_set_headers и more_clear_headers директивы ...

15 голосов
/ 02 июня 2017

Установить Nginx Extras

sudo apt-get update
sudo apt-get install nginx-extras

Сведения о сервере можно удалить из ответа, добавив следующие две строки в nginx.conf (в разделе http)

more_clear_headers Server;
server_tokens off;
15 голосов
/ 26 апреля 2015

Если у вас все в порядке, просто изменив заголовок на другую строку, состоящую из пяти или менее букв, вы можете просто исправить двоичный файл.

sed -i 's/nginx\r/thing\r/' `which nginx`

Что, как решение, имеет несколько заметных преимуществ. А именно, что вы можете разрешить управление версиями вашего nginx менеджером пакетов (то есть, без компиляции из исходного кода), даже если nginx-extras недоступны для вашего дистрибутива и вам не нужно беспокоиться о каких-либо код чего-то вроде nginx-extras уязвим.

Конечно, вы также захотите установить параметр server_tokens off, чтобы скрыть номер версии, или исправить эту строку формата.

Я говорю «пять букв или меньше», потому что, конечно, вы всегда можете заменить:

Nginx \ г \ 0

с

боб \ г \ 0 \ г \ 0

оставляя последние два байта без изменений.

Если вам действительно нужно более пяти символов, вам нужно оставить server_tokens включенным и заменить (немного более длинную) строку формата, хотя опять-таки есть верхний предел этой длины, налагаемый длиной строки формата - 1 (для возврата каретки).

... Если ничего из вышеперечисленного не имеет для вас смысла, или вы никогда раньше не исправляли двоичный файл, вы можете не использовать этот подход.

2 голосов
/ 08 апреля 2009

Единственный способ - изменить файл src / http / ngx_http_header_filter_module.c. Я изменил nginx в строке 48 на другую строку.

В конфигурационном файле nginx вы можете отключить server_tokens . Это не позволит nginx напечатать номер версии.

Чтобы проверить, попробуйте curl -I http://vurbu.com/ | grep Server

Должен вернуться

Server: Hai
1 голос
/ 08 августа 2018

После прочтения ответа Парфиана Шота я копаюсь в /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`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...