nginx error_page 指令用于代理静态 URL 的内容

nginx error_page 指令用于代理静态 URL 的内容

我正在尝试使用如下所示的 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_pagehttp://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 的内容 - 但没有附加任何路径。

相关内容