所以我的负载均衡器看起来像这样:
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;
...
}
现在有一点你不知道!
我一直在使用
stream {...}
配置关注此tutorial,以尝试以与上述类似的方式涵盖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上的一切都很好。我在负载均衡器上运行了
tcpdump port 443 and '(tcp-syn|tcp-ack)!=0'
,访问https://maximilian.xyz/
时返回了该值,但是在集群上运行时却什么也没捡到,这意味着tcp数据包没有被传递,为什么?如果这是一个糟糕的选择,请告诉我。
有什么方法可以在负载均衡器上设置SSL证书,然后将这些证书传递给群集?那是更好的方法吗?
最佳答案
根据http://nginx.org/docs/stream/ngx_stream_upstream_module.html#server上的文档:
但是看来您的问题缺少所述端口。
因此,也许可以做到这一点:
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_pass
bool 型指令将它proxy_ssl
到一个HTTP上游或一个https上游。关于ssl - 如何使用Nginx从http负载均衡器迁移到https负载均衡器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35177029/