如何覆盖Nginx中proxy_pass错误回退时返回的状态码
解决方案
Nginx的error_page指令默认会保留原始错误响应的状态码,你只需要调整该指令的配置,添加=参数即可让最终响应使用 fallback 逻辑返回的真实状态码。
修改后的配置如下:
location @img_fallback { try_files $uri =404; } location ~ \.(png|jpe?g)$ { proxy_intercept_errors on; # 错误码后添加=参数,自动使用fallback逻辑的实际返回状态码 error_page 500 502 503 504 = @img_fallback; proxy_pass https://someinternalservice.com:3000; }
配置说明
=参数不跟具体数值时,Nginx会自动适配回退逻辑的最终状态:try_files匹配到本地文件正常返回时状态码为200,未匹配到文件返回404时最终状态也为404,不会再沿用代理返回的5xx错误码。- 如果你需要强制所有走fallback的请求都返回200(不推荐,会掩盖真实的资源不存在情况),也可以写成
error_page 500 502 503 504 =200 @img_fallback。
内容的提问来源于stack exchange,提问作者Levy Barbosa
相关产品推荐
相关产品推荐

