Я хотел бы настроить свой сервер nginx так, чтобы он возвращал определенную страницу ошибки с кодами состояния HTTP 50x, и я бы хотел, чтобы эта страница была недоступна по прямому запросу от пользователей (например, http // mysite / internalerror).
Для этого я использую nginx internal
директиву, но я, должно быть, что-то упускаю, например, когда я поместил эту директиву в свой /internalerror
location, nginx возвращает настраиваемую ошибку 404 (которая даже не является моей страницей с ошибкой 404) при сбое страницы.
Итак, чтобы подвести итог, вот что, похоже, происходит:
error_page
правило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?