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

Страница ошибки nginx и внутренние директивы не работают должным образом

Я хотел бы настроить свой сервер nginx так, чтобы он возвращал определенную страницу ошибки с кодами состояния HTTP 50x, и я бы хотел, чтобы эта страница была недоступна по прямому запросу от пользователей (например, http // mysite / internalerror).

Для этого я использую nginx internal директиву, но я, должно быть, что-то упускаю, например, когда я поместил эту директиву в свой /internalerror location, nginx возвращает настраиваемую ошибку 404 (которая даже не является моей страницей с ошибкой 404) при сбое страницы.

Итак, чтобы подвести итог, вот что, похоже, происходит:

  1. Добраться до дома
  2. nginx передает запрос Python
  3. Я моделирую ошибку приложения, чтобы получить код ошибки 502
  4. nginx пытается вернуть / InternalError из своего error_page правило
  5. из-за internal правило, он, наконец, не возвращается к пользовательскому коду ошибки 404 <- почему? в документации говорится error_page директивы не касаются internal: http://wiki.nginx.org/HttpCoreModule#internal

Вот выдержка из nginx.conf с несколькими комментариями, чтобы указать на вещи:

error_page  404 /NotFound;
error_page  500 502 503 504 =500 /InternalError; # HTTP 500 Error page declaration

location / {
    try_files /Maintenance.html $uri @pythonbackend;
}

location @pythonbackend {
    include uwsgi_params;
    uwsgi_pass unix:///tmp/uwsgi.sock;
}

location ~* \.(py|pyc)$ { # This internal location works OK and returns my own 404 error page
    internal;
}

location /__Maintenance.html { # This one also works fine
    internal;
}

location ~* /internalerror { # This one doesn't work and returns nginx's 404 error page when I trigger an error somewhere on my site
    internal;
}

Большое спасибо за вашу помощь!!

Нет особого смысла использовать "~ *" для местоположения / internalerror, подойдет обычное местоположение.

Вы получаете 404, потому что файл / InternalError отсутствует. Вы намеревались обслуживать такие запросы из бэкэнда uwsgi?