Подмена имени сервера в Nginx

Из соображений безопасности в Nginx из коробки можно скрыть версию веб-сервера на компьютере. Для этого служит директива server_tokens и её значение off. Это позволит избежать возможных атак со стороны злоумышленников, нацеленных на уязвимости в какой-то определенной версии Nginx. Однако есть возможность изменить и само имя сервера. Правда для этого необходимо изменение исходных кодов, а не добавление директив в файлы конфигурации.

Скачав необходимую версию сервера с официального сайта, распакуем её и устремимся в исходники:

wget http://nginx.org/download/nginx-1.6.2.tar.gz
tar zxf nginx-1.6.2.tar.gz
cd nginx-1.6.2/src/http/

Искомое нам значение находится в файле ngx_http_header_filter_module.c, на 49 строке

static char ngx_http_server_string[] = "Server: nginx" CRLF;
static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;

Исправляем его по своему усмотрению:

static char ngx_http_server_string[] = "Server: XskinWebServer" CRLF;
static char ngx_http_server_full_string[] = "Server: XskinWebServer" CRLF;

Компилируем и собираем Nginx, подставляя привычные параметры:

./configure ... 
make
make install

После этих манипуляций наш веб-сервер начинает обманывать браузеры, выдавая себя за другого. Однако, на страницах ошибок (например, 404) он всё еще пишет своё истинное имя. Это недоразумение также можно исправить, для этого необходимо внести изменения в файл src/http/ngx_http_special_response.c, строку 22

ngx_http_special_response_1

и строку 29

ngx_http_special_response_2

Ссылки: