我正在尝试使用如下所示的 error_page 来捕获错误,然后从外部 url 读取内容并将其发送到客户端:
error_page 404 =404 @err404;
location @err404 {
proxy_pass http://www.myserver.com;
}
这是在“服务器”指令中。我希望任何 404 都能被它捕获(确实如此)——然后来自http://www.myserver.com读取——并作为 404 的主体返回给客户端。
这几乎可以正常工作 - 但当我尝试访问时http://myserver/somenonexistingURL
,代理通过http://www.myserver.com/somenonexistingURL
- 这似乎没有帮助 - 有没有办法让它只代理我输入的内容?而不是代理整个请求?
如果我把
error_page 404 http://backend
然后我得到一个 30X 重定向(按照文档)——这也不是我想要的。
有任何想法吗?
文档: http://wiki.nginx.org/HttpCoreModule#error_page 和 http://nginx.org/en/docs/http/ngx_http_core_module.html#error_page
答案1
以下是对我有用的方法:
error_page 404 =404 @err404;
location @err404 {
rewrite ^/(.*) / break;
proxy_pass http://www.unsw.edu.au;
}
这两者都返回 404 作为 http 状态代码,以及来自 proxy_pass url 的内容 - 但没有附加任何路径。