nginx ssl 代理到多个 apache 服务器

nginx ssl 代理到多个 apache 服务器

我有多个通过 HTTP 连接的 nodejs web 应用程序服务器,我需要验证发送到这些服务器的请求。我考虑使用 nginx 作为请求的代理,只使用 SSL 证书验证 nginx 服务器,这样发送回客户端的数据/图像就可以通过 HTTPS 提供。

这是我所想到的结构:

                                   +--- app1 ---> node.js on ip:10001
                                   |
client --> https --> nginx --> http --- app2 ---> node.js on ip:10002
                                   |
                                   +--- app3 ---> node.js on ip:10003

我担心的是代理请求的响应对象。基于 Webkit 的浏览器和 Safari 警告我,我的应用程序采用 HTTPS,但通过 HTTP 提供内容(混合内容警告)。

通过认证代理服务器,我对客户端的响应会被验证为 HTTPS 还是 HTTP?

我的 nginx 代理将有一个经过认证的子域名,例如代理域名,因此请求将会被执行,例如“https://proxy.domain.com:10001“。请求是通过 HTTPS 发送给代理的,但返回的服务器内容是通过 HTTP 发送的。代理将如何处理这些返回的内容?

它会应用 SSL 加密吗,因此像这样发回资源:“https://proxy.domain.com:10001/resource.png

提前感谢大家

答案1

您正在尝试的操作称为 SSL 终止。当反向代理处理 SSL 时,它会使用 HTTP 协议将请求转发到代理服务器。因此,客户端将具有 HTTPS 连接,但从反向代理 (nginx) 到代理服务器 (apache) 将具有 HTTP 连接。在 nginx 中,您可以执行以下操作:

server {
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     www.example.com.chained.crt;
    ssl_certificate_key www.example.com.key;

    location /{
        proxy_pass http://upstream_name:80;
        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;
        proxy_set_header X-Forwarded-Scheme $scheme;
    }
}

如果你想进一步研究它,你可以使用 Nginx 的官方文档https://www.nginx.com/resources/admin-guide/nginx-ssl-termination/。对于混合内容,我认为我和@Bert 有同样的想法。这可能是因为在 HTML 中您仍然提供 http 协议。

相关内容