所以我的负载均衡器看起来像这样:
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证书并将这些证书传递给集群?这是一种更好的方法吗?
答案 0 :(得分: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;
(作为旁注,为什么你使用8.8.8.8作为上游备份?这不应该是谷歌的公共DNS服务吗?)
或者,您确实可以在流中设置证书,请参阅http://nginx.org/docs/stream/ngx_stream_ssl_module.html,SSL指令基本上与流模块之外的指令基本相同。然后,您可以proxy_pass
使用proxy_ssl
布尔指令按http://nginx.org/docs/stream/ngx_stream_proxy_module.html#proxy_ssl将其sudo apt-get install eclipse
发送到http上游或https。