Ssl 如何使用nginx从http负载平衡器迁移到https负载平衡器
因此,我的负载平衡器如下所示:Ssl 如何使用nginx从http负载平衡器迁移到https负载平衡器,ssl,nginx,tcp,https,load-balancing,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-I
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;
}
}
server {
listen 80;
root /var/www/maximilian.xyz/public_html;
index index.php index.html index.htm;
server_name maximilian.xyz www.maximilian.xyz;
...
}
集群上的许多域配置之一(192.168.0.20
)如下所示:
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;
}
}
server {
listen 80;
root /var/www/maximilian.xyz/public_html;
index index.php index.html index.htm;
server_name maximilian.xyz www.maximilian.xyz;
...
}
现在你不知道了! 我一直在使用
流{…}
配置来遵循这一点,试图以与上面类似的方式覆盖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)
但当我运行负载平衡器时,它根本不工作。运行
服务nginx configtest
时,nginx上的一切正常
我已经运行了tcpdump端口443和“(tcp-syn | tcp-ack)=0'
在访问https://maximilian.xyz/
但是在集群上运行时,没有拾取任何内容,这意味着tcp数据包没有被传递,为什么
如果这是一个糟糕的选择,请告诉我
有没有办法在负载平衡器上设置SSL证书并将这些证书传递给集群?这是更好的方法吗
根据以下文件: 该地址可以指定为域名或带有强制端口的IP地址 然而,你的问题似乎遗漏了这一点 因此,也许这会起到作用:
stream {
upstream myapp1 {
- server 192.168.0.20;
+ server 192.168.0.20:433;
(作为旁注,为什么要使用8.8.8.8作为上游备份?这不应该是谷歌的公共DNS服务吗?)
或者,您确实可以在流中设置证书,请参见,SSL指令基本上与流模块外部的指令相同。然后,您可以使用
proxy\u ssl
boolean指令将它传递到http上游或https上游。尝试了流更改,但没有成功。还有我可以调试的吗?@Maximilian,错误日志怎么说?您是否注意到,stream
仅在相对较新的nginx版本中受支持,即使如此,它还是一个编译时选项,在nginx提供的默认情况下被禁用?您是否启用了所有这些流模块?我使用了最新的nginx并运行system nginx configtest
返回OK。如果我启用了模块,我还能调试吗?@Maximilian,你可以使用nginx-V
;错误日志怎么说?--with stream--with-stream\u ssl\u module
都在其中我怀疑您的问题是您在流中的服务器块中启用了“ssl”。实际上,你只是想纯粹地传递它,而不是试图解释它。nginx可能忽略了它(因为您没有收到错误),但这是唯一突出的地方。@jdewald现在将删除它!不走运:(我真的不明白为什么这不起作用!!