nginx – 根据proxy_pass响应更改error_page

是否可以根据上游代理的响应更改回退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,则从/ your / nginx / html / directory /发送404.html而不涉及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; }