我们要求客户要求将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或使用重写来完成。如果有人知道怎么做,请你举个详细的例子。
答案 0 :(得分:4)
您可以将您的回复正文作为字符串返回吗?
error_page 404 = /404.html;
location /404.html {
return 500 "<b>Whoa! 500 couldn't find it.</b>
";
}