如何使用nginx从http负载均衡器迁移到https

max*_*sme 5 ssl https tcp load-balancing nginx

所以我的负载均衡器看起来像这样:

upstream myapp1 {
    server 192.168.0.20;
    server 8.8.8.8 backup;
}

server {
    listen 80 default;

    location / {
        proxy_pass http://myapp1;
        proxy_set_header Host $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
Run Code Online (Sandbox Code Playgroud)

cluster(192.168.0.20)上的众多域配置之一如下所示:

server {
    listen 80;

    root /var/www/maximilian.xyz/public_html;
    index index.php index.html index.htm;

    server_name maximilian.xyz www.maximilian.xyz;

    ...
}
Run Code Online (Sandbox Code Playgroud)

现在你不知道了!

我一直在使用配置尝试以与上面类似的方式覆盖ssl/https/443来学习本教程stream {...}:

stream {
    upstream myapp1 {
        server 192.168.0.20:443;
        server 8.8.8.8:443 backup;
    }

    server {
            listen 443 ssl;
            proxy_pass myapp1;
    }
}
Run Code Online (Sandbox Code Playgroud)

这次我在群集中添加了192.168.0.20:

server {
    listen 443 ssl;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/maximilian.xyz/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/maximilian.xyz/privkey.pem;

    server_name maximilian.xyz www.maximilian.xyz;

    root /NAS/maximilian.xyz/public_html;
    index index.php index.html index.htm;

    ...
}
Run Code Online (Sandbox Code Playgroud)

当DNS记录直接指向192.168.0.20时,其工作完美(https).


但是,当我通过负载平衡器时,它根本不工作.运行时,nginx上的一切都很好service nginx configtest.

我已经运行tcpdump port 443 and '(tcp-syn|tcp-ack)!=0'了负载均衡器,它在访问https://maximilian.xyz/时返回,但是当在群集上运行时,没有任何东西被拾取,这意味着tcp数据包没有被传递,为什么?

如果这是一个可怕的选择,请告诉我.

有没有办法在负载均衡器上设置SSL证书并将这些证书传递给集群?这是一个更好的方法吗?


cns*_*nst 0

根据http://nginx.org/docs/stream/ngx_stream_upstream_module.html#server的文档:

地址可以指定为域名或带有强制端口的 IP 地址

但您的问题似乎缺少所述端口。

因此,也许这会起作用:

 stream {
    upstream myapp1 {
-        server 192.168.0.20;
+        server 192.168.0.20:433;
Run Code Online (Sandbox Code Playgroud)

(顺便说一句,为什么你使用 8.8.8.8 作为上游备份?这不是 Google 的公共 DNS 服务吗?)

或者,您确实可以在流中设置证书,请参阅http://nginx.org/docs/stream/ngx_stream_ssl_module.html,SSL 指令基本上与流模块之外的指令几乎相同。然后,您可以按照http://nginx.org/docs/stream/ngx_stream_proxy_module.html#proxy_sslproxy_pass使用布尔指令将其连接到 http 上游或 https 上游。proxy_ssl