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

标签 ssl nginx tcp https load-balancing

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

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;
    }
}

集群上的许多域配置之一 (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;
   
    ...
}

现在是你不知道的地方!

我一直在关注这个tutorial使用 stream {...} 配置尝试以与上述类似的方式覆盖 ssl/https/443:

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

这次我在 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;

    ...
}

当 DNS 记录直接指向 192.168.0.20 时可以完美运行 (https)。


但是当我运行负载平衡器时,它根本不工作。运行 service nginx configtest 时,nginx 一切正常。

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

如果这是一个糟糕的选择,请告诉我。

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


最佳答案

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

The address can be specified as a domain name or IP address with an obligatory port

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

因此,也许这可以解决问题:

 stream {
    upstream myapp1 {
-        server 192.168.0.20;
+        server 192.168.0.20:433;

(作为旁注,您为什么使用 8.8.8.8 作为上游备份?这不应该是 Google 的公共(public) DNS 服务吗?)

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

关于ssl - 如何使用 nginx 从 http 负载均衡器迁移到 https 负载均衡器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35177029/

相关文章:

nginx - Nginx反向代理背后的Nginx配置

c++ - 立即在不同的线程上通过 IP 发送

c - TCP 连接 - 延迟 close() 和 RST

security - SSL 是否可以抵御这些形式的攻击?

javascript - Nginx add_header Sec-WebSocket-Protocol 不起作用

java - Apache Tomcat/7.0.35 SSL 证书安装

PHP nginx mysql : Fatal error: Call to undefined function mysql_connect() in/var/www-git/www1/api/credentials/mysql. php on line 12

c++ - C TCP 客户端 sockaddr_in 指针

预订页面上的 Wordpress SSL

java - 使用 SSL/TLS 和 keystore 配置 Jetty