我的设置大致如下,
客户端 ---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 的另一个网站。
你能帮忙吗?非常感谢!!