如何处理从映射到 Nginx 子目录的反向代理服务器的重定向?

如何处理从映射到 Nginx 子目录的反向代理服务器的重定向?

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

相关内容