我想使用 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 可以实现这一点吗?如果可以,如何实现?或者也许有更好的方法可以做到这一点?