无需 SSL 终止的 Nginx 反向代理

无需 SSL 终止的 Nginx 反向代理

我正在尝试在 Windows 2k12 服务器上设置 Microsoft 远程桌面 Web 服务。它功能齐全,但我想(需要)在它前面放置一个反向代理(Nginx)。

我只有 1 个外部 IP(固定),并在其后面托管多个网站,但并非全部位于同一 VM 上。我设法让 Nginx 充当 HTTP 和 HTTPS 流量的反向代理,使用虚拟主机。但是,对于远程桌面服务,SSL 卸载在启动应用程序时给我带来了问题。因此,我想通过 Nginx 服务器传递流量,而无需 SSL 卸载,并让 Windows 服务器执行所有 SSL 操作。似乎即使没有输入“ssl on;”,Nginx 也会将来自另一个虚拟主机的证书放在 RD Web 的服务器部分。我没有类似“默认“在我的配置中的任何地方阻止。

以下是该设置的一个小“草图”:

                                                           -- |server 1 HTTP|
|internet user| -- |Nginx Rev Proxy listening on port 443| -- |windows server|
                                                           -- |server 2 HTTP|

下面是我拥有的配置文件(用于 RD Web):

server {
        listen 443;
        server_name host.domain.com;

        access_log /var/log/nginx/host.domain.com.access.log;

        location / {
                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_pass              https://172.29.0.249;
        }

}

我已经尝试让 Windows 服务器接受纯 HTTP,但这再次给远程桌面应用程序带来了问题。我可以登录,然后就停止了。我之前已经提到过,但是当我将防火墙上的端口 443 转发到 Windows 服务器时,远程桌面连接可以正常工作,所以这似乎不是问题所在。

任何帮助都将不胜感激。我对 Nginx 及其配置还不熟悉(过去一直使用 apache)。

答案1

nginx 无法在不终止 SSL 的情况下通过 SSL。在 nginx 前面使用 haproxy(至少 1.5 版)可以实现此功能,将 RD Web 流量代理到您的终端服务器,并将其他所有内容代理到 nginx。

答案2

答案3

从 1.11.5 版本开始,nginx 支持具有 SNI 感知的直通 SSL 代理: http://nginx.org/en/docs/stream/ngx_stream_ssl_preread_module.html

答案4

对于 nginx,您需要使用 stream 而不是 http。您可以将其添加到您的/etc/nginx/nginx.conf

stream {

    map $ssl_preread_server_name $targetBackend {
        ~^(?<domain>.+).example.com$ 192.168.1.2:443;
        ~^(?<domain>.+).random.com$ $domain.internal.local:443;
    }

    server {
        listen 443;

        proxy_pass $targetBackend;
        ssl_preread on;
    }
}

相关内容