Следующее является демонстрационной конфигурацией сервера Nginx. Без "волшебного талисмана" блок местоположения, проксированное ошибочное содержание приводит к Nginx 404 страницы, а не специализированной ошибочной подаваемой странице.
Удаление proxy_intercept_errors директивы обслуживает надлежащую проксированную ошибочную страницу с надлежащими заголовками кода ошибки HTTP.
Непроксированные ошибочные страницы представляются правильно независимо от присутствия волшебного талисмана.
Какие-либо идеи относительно того, что точно продолжается?
server {
server_name mydomain.com "";
listen 80;
root /var/www;
error_page 400 401 402 403 404 500 501 502 503 504 /admin/error_page.htm;
proxy_intercept_errors on;
location /proxy/ {
proxy_read_timeout 60s;
proxy_set_header Host $host;
proxy_pass http://myservers;
}
location /test404/ {
return 404;
}
location /admin/ { # this line constitute a magical talisman that fixes proxied error interception(???)(!)
rewrite ^(/admin)(.*)$ /admin$2 break;
}
}
Мне очень жаль, что этот ответ срабатывает поздно, но на данный момент с текущей стабильной версией v1.8.1 предоставленная вами конфигурация должна работать без какого-либо талисмана .
Если вы указали версию, над которой вы экспериментировали, было бы неплохо проверить, исправлена ли ошибка или была ли конфигурация некорректна.
Я предлагаю вам дважды проверить свою конфигурацию, так как она вам определенно не нужна это / admin /
расположение и содержащаяся в нем директива rewrite
. Будьте особенно внимательны при удалении всего, что не является частью этого теста (и что вы не показываете), так как это может мешать.
В крайнем случае, вы можете попробовать следующий, успешно протестированный, фрагмент конфигурации и медленно внесите изменения и посмотрите, в какой момент результаты расходятся с ожиданиями:
server {
listen 80;
listen [::]:80;
server_name example.org;
location /proxy {
return 418 "Host: $host, Connection: $http_connection";
}
}
server {
listen 80;
listen [::]:80;
server_name example.com;
root /var/ious/files;
error_page 418 = /error_page.html;
proxy_intercept_errors on;
location /proxy {
proxy_pass http://example.org;
}
}