我们有一个客户要求将http 500响应代码返回给他们的客户端,以获取对未找到的内容的请求,并从应用服务器传递响应正文.他们的应用程序不接受404返回代码.我们有一种hack尝试通过Nginx返回此代码,并且还有其他有效500响应的情况尝试下一个上游服务器.对于我们客户想要的特殊情况,我们从上游服务器返回501,然后使用proxy_intercept_errors和error_page指令,如下所示:
服务器{
听28080;
#In comeing
server_name INTO;
location / {
proxy_pass http://some_servers;
proxy_redirect off;
proxy_next_upstream error timeout invalid_header http_500 http_404;
proxy_connect_timeout 2;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_intercept_errors on;
}
# redirect server error pages to the static page /50x.html
#
error_page 501 =500 /50x.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/Nginx/html;
}
当我们这样做时,我们得到他们需要的响应代码(500),但是我们失去了响应体.有没有办法做到这一点,即发回一个虚假的返回代码,Nginx转换为500,从服务器传递的响应主体包含在客户端的响应中.我对Nginx相当新,并且一直在研究和尝试几天没有运气.我想也许这可以通过proxy_set_header或使用重写来完成.如果有人知道怎么做,请你举个详细的例子.