![如何处理从映射到 Nginx 子目录的反向代理服务器的重定向?](https://linux22.com/image/730137/%E5%A6%82%E4%BD%95%E5%A4%84%E7%90%86%E4%BB%8E%E6%98%A0%E5%B0%84%E5%88%B0%20Nginx%20%E5%AD%90%E7%9B%AE%E5%BD%95%E7%9A%84%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E9%87%8D%E5%AE%9A%E5%90%91%EF%BC%9F.png)
我想使用 Nginx 作为应用程序的反向代理,该应用程序映射到我的网站的子目录。该应用程序有自己的一组位置,并且必须能够发出到应用程序内其他位置的重定向,但该应用程序不知道它已映射到主网站的子目录。
例如:https://example.com/app/page1
应传递给http://the_app/page1
。此外,如果应用程序发出重定向到/page2
,则 Nginx 应将响应中的位置修改为https://example.com/app/page2
。
以下是我的当前配置:
upstream the_app {
server 127.0.0.1:8000;
}
。 。 。
rewrite /app /app/ break;
location ~/app(?<app_path>/.*$) {
proxy_pass http://the_app$app_path;
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_set_header X-Forwarded-Proto $scheme;
}
这确实会将请求转发到具有正确路径(例如http://app/page1
)的应用程序,但无法正确处理重定向。当应用程序发出重定向到时/page2
,浏览器将被重定向到https://example.com/page2
(而不是.../app/page2
)。然后,当浏览器请求新位置时,它不会发送到应用程序,因此它会返回 404 或主站点的任意页面。
我曾尝试针对类似问题给出的答案建议,但这些建议都没有导致重定向以这种方式处理。
使用 Nginx 可以实现这一点吗?如果可以,如何实现?或者也许有更好的方法可以做到这一点?