Веб

Как убрать футер Nginx из всех HTTP‑ответов

Удалите стандартный футер «nginx» из всех HTTP‑ответов, настроив собственные страницы ошибок для всех кодов состояния. Чистые ответы без лишних строк на сайте.

Как удалить слово «nginx» из нижнего колонтитула ответа для всех кодов состояния в Nginx?

Я хочу убрать слово nginx, которое появляется в нижнем колонтитуле каждого HTTP‑ответа, генерируемого Nginx. Я пробовал использовать пользовательские страницы ошибок, которые работают для некоторых кодов состояния, но мне нужно, чтобы слово исчезло из каждого кода состояния ответа. Как настроить Nginx, чтобы отключить стандартный текст футера для всех ответов?

Текст «nginx», который появляется в футере, является частью стандартных страниц ошибок Nginx. Чтобы убрать его из всех ответов, просто обслуживайте собственные страницы ошибок для всех кодов статуса, которые может вернуть Nginx, и убедитесь, что эти страницы не содержат футер.


Содержание


Почему появляется «nginx» в футере?

Nginx поставляется с встроенными шаблонами для многих кодов ошибок (400–599).
Каждый шаблон заканчивается строкой:

html
<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>.

nginx
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 ...
    }
}

Что делает этот фрагмент

  1. error_page … /error.html; говорит Nginx обслуживать /error.html для всех перечисленных кодов статуса.
  2. Блок location = /error.html делает файл доступным только внутренне, так что клиент никогда напрямую не запрашивает /error.html.
  3. Поскольку вы можете задать любой HTML, просто уберите строку <center>nginx</center>.

Такой подход работает для всех кодов статуса, как показано в обсуждении на Server Fault: is‑that‑possible‑to‑remove‑the‑word‑nginx‑from‑default‑404-page-footer


Проверка и отладка

  1. Тестируйте известную ошибку – например, запросите несуществующий файл и убедитесь, что тело ответа содержит вашу кастомную страницу без «nginx» в футере.
  2. Проверьте заголовок Server – вы увидите Server: nginx/1.XX.X только если не включили server_tokens off;.
  3. Используйте curl -I для просмотра заголовков и curl -v для просмотра тела.

Если футер всё ещё появляется:

  • Убедитесь, что путь в root совпадает с реальным расположением файла.
  • Проверьте, что директива error_page перечисляет все коды статуса, которые вас интересуют.
  • Посмотрите в /var/log/nginx/error.log на наличие ошибок синтаксиса после перезагрузки Nginx.

Дополнительные меры: скрыть заголовок Server

Если вы также хотите убрать заголовок Server (который иногда содержит «nginx»), можно воспользоваться модулем more_clear_headers:

nginx
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» в футере, и полностью под вашим контролем.

Авторы
Проверено модерацией
Модерация