所以我的负载均衡器看起来像这样:
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/时返回的负载均衡器上运行了
但是当在集群上运行时,没有任何东西被拾取,这意味着 tcp 数据包没有被传递,为什么?tcpdump 端口 443 和“(tcp-syn|tcp-ack)!=0”
如果这是一个糟糕的选择,请告诉我。
有没有一种方法可以在负载均衡器上设置 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/