Можно ли изменить резервную страницу error_page на основе ответа вышестоящего прокси?
upstream serverA {
server servera.com;
}
upstream serverB {
server serverb.com;
}
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
proxy_set_header Host $host;
proxy_pass http://serverA;
proxy_intercept_errors on;
# if serverA returns 'hard' 404
# IE returns X-HARD-404=true header
return 404;
# else I would like to fallback to server-b
error_page 403 404 500 502 504 = @serverB;
}
Причина, по которой я хотел бы сделать это, - проблема с нашей настройкой. Обычно мы отправляем запрос на server-a, и если он возвращает 404, мы просим server-b вернуть страницу. В этом случае мы не хотим, чтобы server-b возвращал свою страницу, и мы хотим явно вернуть 404, не пытаясь server-b.
Вы также можете обслуживать страницу с ошибкой прямо из nginx.
Если serverA дает 404, отправьте 404.html из / your / nginx / html / directory / без участия serverB
server {
listen 80;
location / {
proxy_pass http://serverA/;
proxy_intercept_errors on;
proxy_redirect off;
error_page 404 /404.html;
}
location /404.html {
root /your/nginx/html/directory/;
}
}
Вы можете попробовать это:
location / {
...
error_page 404 = @check_header;
error_page 403 500 502 504 = @serverB;
}
location @check_header {
if ($upstream_http_x_hard_404) {
return 404;
}
return 403;
error_page 403 = @serverB;
}