通过 Nginx 重写附加端口号

Rewrite appended port number via Nginx

您好,我使用 Nginx 作为 Gunicorn 和 Apache 的反向代理。某些子域被重定向到 Gunicorn,而其他所有子域都被重定向到 Apache。 Nginx 也将所有 http 请求重写为 https 请求。

第一次调用通常有效,但每次与 Apache 站点交互时,都会添加 Apache 的侦听端口,这会破坏我的设置。 所有与 Apache 无关的东西都可以正常工作。

是什么导致了这种行为,我该如何解决?是某些 Apache 设置还是我的 nginx 设置错误?

    # everything to apache
    location / {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_redirect off;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $host;
            proxy_pass http://127.0.0.1:8090;
            proxy_set_header X-Nginx-Proxy true;
            }

我应该只用 :8090 重写每个请求吗?正则表达式会是什么样子?

如果问题只是源自 Apache 或 Apache 托管的应用程序的外部重定向(3xx 状态响应),则 nginx 可以使用 proxy_redirect 指令重写它。您需要研究 Location: 响应 header 的确切内容,但其中一个可能接近:

proxy_redirect http://example.com:8090/ /
proxy_redirect https://example.com:8090/ /

详情见this document

如果问题是实际文档中嵌入的 URL(例如 JS、CSS 和图像),则需要在托管应用程序本身中修复它。