Как убрать футер Nginx из всех HTTP‑ответов
Удалите стандартный футер «nginx» из всех HTTP‑ответов, настроив собственные страницы ошибок для всех кодов состояния. Чистые ответы без лишних строк на сайте.
Как удалить слово «nginx» из нижнего колонтитула ответа для всех кодов состояния в Nginx?
Я хочу убрать слово nginx, которое появляется в нижнем колонтитуле каждого HTTP‑ответа, генерируемого Nginx. Я пробовал использовать пользовательские страницы ошибок, которые работают для некоторых кодов состояния, но мне нужно, чтобы слово исчезло из каждого кода состояния ответа. Как настроить Nginx, чтобы отключить стандартный текст футера для всех ответов?
Текст «nginx», который появляется в футере, является частью стандартных страниц ошибок Nginx. Чтобы убрать его из всех ответов, просто обслуживайте собственные страницы ошибок для всех кодов статуса, которые может вернуть Nginx, и убедитесь, что эти страницы не содержат футер.
Содержание
- Почему появляется «nginx» в футере?
- Как отключить футер для ошибок
- Пример конфигурации для всех кодов статуса
- Проверка и отладка
- Дополнительные меры: скрыть заголовок Server
- Заключение
Почему появляется «nginx» в футере?
Nginx поставляется с встроенными шаблонами для многих кодов ошибок (400–599).
Каждый шаблон заканчивается строкой:
<hr><center>nginx</center>
чтобы пользователь мог определить, какой сервер сгенерировал ошибку.
Этот футер генерируется только для ответов с ошибками; обычные ответы 2xx его не содержат.
Как описано в ответе на Stack Overflow, стандартный футер является частью скомпилированных страниц ошибок: remove‑nginx‑word‑from‑response‑footer‑in‑nginx
Как отключить футер для ошибок
Самый простой способ – предоставить собственную страницу ошибки для нужных кодов.
С помощью директивы error_page можно перенаправить запрос на статический файл (или внутреннее расположение), который не будет содержать строку <center>nginx</center>.
Ключевые моменты
| Директива | Что делает | Пример |
|---|---|---|
server_tokens off; |
Убирает «nginx» из заголовка Server (не из футера). |
server_tokens off; |
error_page |
Привязывает код статуса к URI, который будет обслужен. | error_page 404 /errors/404.html; |
location = /errors/404.html |
Определяет файл, который будет обслужен для сопоставленной ошибки. | location = /errors/404.html { internal; root /var/www/errors; } |
Документация Nginx объясняет этот механизм: ngx_http_error_page_module
Пример конфигурации для всех кодов статуса
Ниже приведён минимальный фрагмент, который убирает футер для каждого кода ошибки, который может вернуть Nginx (400–599).
Создайте один файл (/var/www/errors/error.html), содержащий нужный вам контент, без строки <center>nginx</center>.
http {
server_tokens off; # скрывает «nginx» из заголовка Server
server {
listen 80;
server_name example.com;
# Указываем Nginx использовать нашу страницу для всех кодов ошибок
error_page 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 421 422 423 424 425 426 428 429 431 451
500 501 502 503 504 505 506 507 508 510 511
/error.html;
# Предоставляем файл только внутренне – клиент напрямую его не запрашивает
location = /error.html {
internal;
root /var/www/errors; # путь к error.html
try_files $uri =404; # резервный вариант, если файл отсутствует
}
# ... ваши обычные блоки location ...
}
}
Что делает этот фрагмент
error_page … /error.html;говорит Nginx обслуживать/error.htmlдля всех перечисленных кодов статуса.- Блок
location = /error.htmlделает файл доступным только внутренне, так что клиент никогда напрямую не запрашивает/error.html. - Поскольку вы можете задать любой HTML, просто уберите строку
<center>nginx</center>.
Такой подход работает для всех кодов статуса, как показано в обсуждении на Server Fault: is‑that‑possible‑to‑remove‑the‑word‑nginx‑from‑default‑404-page-footer
Проверка и отладка
- Тестируйте известную ошибку – например, запросите несуществующий файл и убедитесь, что тело ответа содержит вашу кастомную страницу без «nginx» в футере.
- Проверьте заголовок
Server– вы увидитеServer: nginx/1.XX.Xтолько если не включилиserver_tokens off;. - Используйте
curl -Iдля просмотра заголовков иcurl -vдля просмотра тела.
Если футер всё ещё появляется:
- Убедитесь, что путь в
rootсовпадает с реальным расположением файла. - Проверьте, что директива
error_pageперечисляет все коды статуса, которые вас интересуют. - Посмотрите в
/var/log/nginx/error.logна наличие ошибок синтаксиса после перезагрузки Nginx.
Дополнительные меры: скрыть заголовок Server
Если вы также хотите убрать заголовок Server (который иногда содержит «nginx»), можно воспользоваться модулем more_clear_headers:
http {
server_tokens off; # убирает версию из заголовка Server
more_clear_headers Server; # убирает сам заголовок
}
Директива
more_clear_headersвходит в модульheaders_more, описанный здесь: GetPageSpeed – How to remove the Server header in Nginx
Заключение
- Текст «nginx», который вы видите в футере, является встроенной частью стандартных страниц ошибок Nginx.
- Чтобы полностью избавиться от него, предоставьте собственную страницу ошибки для всех кодов статуса, используя
error_page. - Один файл
error.htmlможет обслуживать все ошибки; просто убедитесь, что он не содержит футер. server_tokens off;убирает «nginx» из заголовкаServer;more_clear_headers Serverудаляет заголовок полностью, если нужно.- После обновления конфигурации перезагрузите Nginx и протестируйте несколько кодов ошибок, чтобы убедиться, что футер исчез.
Таким образом, ваши HTTP‑ответы будут чистыми, без стандартного «nginx» в футере, и полностью под вашим контролем.