在nginx中,如何返回http 500返回码并包含响应客户端的响应体

时间:2014-08-05 20:07:29

标签: nginx

我们要求客户要求将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或使用重写来完成。如果有人知道怎么做,请你举个详细的例子。

1 个答案:

答案 0 :(得分:4)

您可以将您的回复正文作为字符串返回吗?

error_page 404 = /404.html;

location /404.html {
    return 500 "<b>Whoa! 500 couldn't find it.</b>
";
}