Как изменить заголовок сервера, возвращаемый nginx?

StackOverflow https://stackoverflow.com/questions/246227

  •  05-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

Другие советы

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

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 .

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

#server_tokens off;

Найдите раздел http .

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

server_tokens off;
more_set_headers 'Server: My Very Own Server';

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

  

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

     

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

     

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

Установите дополнения Nginx

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

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

more_clear_headers Server;
server_tokens off;

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

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

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

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

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

nginx \0

с

боб \0 \0

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

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

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

Единственный способ - изменить файл 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`

Согласно документации он поддерживает пользовательские значения или даже исключение:

Syntax: server_tokens on | off | build | string;

но, к сожалению, только с коммерческой подпиской :

  

Кроме того, в рамках нашей коммерческой подписки, начиная с   версия 1.9.13 подпись на страницах ошибок и & # 8220; сервер & # 8221; ответ   значение поля заголовка может быть установлено явно с помощью строки с   переменные. Пустая строка отключает передачу & # 8220; Server & # 8221;   поле.

Я знаю, что пост довольно старый, но я нашел простое решение, которое работает на дистрибутиве на основе Debian без компиляции nginx из исходного кода.

Сначала установите пакет nginx-extras

  

sudo apt install nginx-extras

Затем загрузите модуль http заголовков nginx, отредактировав файл 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top