Назад | Перейти на главную страницу

Страница статуса Nginx не найдена

Я пытаюсь включить страницу состояния Nginx на моем сервере Centos 7.

Я установил Nginx из репозитория EPEL, Nginx построен с поддержкой staus page:

[root@server ~]# nginx -V 2>&1 | grep -o with-http_stub_status_module
with-http_stub_status_module

Я добавил один файл конфигурации /etc/nginx/conf.d/status.conf:

server {
    listen 80;
    server_name localhost;

    location /nginx_status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        deny all;
    }
}

После перезапуска Nginx не может найти страницу состояния:

[root@server ~]# wget http://localhost/nginx_status
--2017-01-06 17:02:09--  http://localhost/nginx_status
Resolving localhost (localhost)... ::1, 127.0.0.1
Connecting to localhost (localhost)|::1|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2017-01-06 17:02:09 ERROR 404: Not Found.

В каждом руководстве или примере, которые я нашел в Интернете, говорится, что я должен предпринять следующие шаги. Почему я продолжаю получать 404?

Я не вижу никаких проблем с вашей конфигурацией, и это 404, а не 403, что означает, что он даже не читал эту конфигурацию, поэтому шаги отладки, которые я бы сделал, следующие:

  • вы перезапустили nginx;)
  • что-нибудь в error_log?
  • действительно ли nginx слушает локальный хост? на ip4 и ip6? (netstat -plnt)
  • попробуйте wget с отображением заголовков (wget -SO- http://localhost/nginx_status) возможно что-то обнаружится
  • действительно ли nginx читает этот файл конфигурации? (есть ли еще где-нибудь? сделайте умышленную опечатку и посмотрите, не сработает ли он)
  • есть более одного nginx? (здесь растягиваются, но случаются и более странные вещи). Возможно, перезапуск не убивает старый процесс?
  • удалите директиву server_name и попробуйте без нее

Ваш server блок отсутствует listen директива:

    listen [::]:80;

Эта директива указывает nginx отвечать на IPv6-соединения для этого server. К сожалению, вы его пропустили и отвечаете только на соединения IPv4.

Но с тех пор localhost разрешается в адрес IPv6 (и фактически IPv6 является протоколом по умолчанию для всего в Интернете), ваш запрос обрабатывается по умолчанию server блок включен в конфигурацию по умолчанию, которая является listenна IPv6.

Вы должны быть особенно осторожны, чтобы убедиться, что все server блоки listen на IPv6 (обязательно, даже если у вас еще нет глобального IPv6) и IPv4 (необязательно, только если вы используете IPv4).