使用 HTTPS 上游的 HTTP 请求的反向代理的 Nginx URL 问题

使用 HTTPS 上游的 HTTP 请求的反向代理的 Nginx URL 问题

我的设置大致如下,

客户端 ---HTTP---> [DMZ 中的 NginX] ---HTTPS---> [为 Joomla CMS 提供服务的私有空间中的 NginX]

我设法将客户端请求转发到私有 NginX,并且可以访问显示 php 信息的简单测试页面。但是,私有 NginX 提供的所有 URL 都使用 HTTPS 协议。

问题: 客户端访问时http://www.example.com会得到一个包含所有内部链接的页面,https://www.example.com/news/https://www.example.com/image.jpg

我在公共 NginX 上的代理配置是

upstream my-backend {
    server HOSTNAME:443;
}

server {
    listen 80;
    server_name www.example.com;
    location / {
        proxy_pass https://my-backend;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto http;
}

我还编写了一个 test.php 来显示 HTTP 标头信息。在我看来它是正确的。

Host: www.example.com
Remote Address: 10.1.0.5 *Internal IP of my public NginX*
X-Forwarded-For: 2.111.121.220 *Client IP*
X-Forwarded-Proto: http
Server Address: 192.168.5.12 *IP of private NginX*
Server Port: 443

这个问题似乎无处不在,因为它还影响在另一个私有应用服务器(也是 NginX)上运行 Play Framework 的另一个网站。

你能帮忙吗?非常感谢!!

相关内容