我在我的nginx配置中有三个不同的proxy_pass。其中两个重定向到https主机,最后一个通过标准端口80.Nginx proxy_pass重定向到错误的域
两个第一个(example.com
和proxmox.example.com
)工作正常。
但问题是关于第三个。 http://blog.example.com
重定向到https://example.com
,我不明白为什么。
如果有人有一个想法...我是nginx的新手,我仍然难以理解带或不带SSL的proxy_pass。
这是我的配置。
server {
listen 80 default_server;
server_name _;
return 444;
}
server {
listen 80;
server_name example.com proxmox.example.com;
rewrite ^(.*) https://$host$1 permanent;
}
server {
listen 443;
server_name example.com;
ssl on;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
proxy_redirect off;
location/{
proxy_pass https://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
listen 443;
server_name proxmox.example.com;
ssl on;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
proxy_redirect off;
location/{
proxy_pass https://localhost:8006;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
server {
listen 80;
server_name blog.example.com;
proxy_redirect off;
location/{
proxy_pass http://10.0.0.3:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
感谢
编辑
我已经在Nginx的文档阅读。这可能是问题的原因。
使用此配置,浏览器将接收默认服务器的证书,即www.example.com,而不管所请求的服务器名称如何。这是由SSL协议行为造成的。 SSL连接在浏览器发送HTTP请求之前建立,而nginx不知道请求的服务器的名称。因此,它可能只提供默认服务器的证书。
Link: see in Name-based HTTPS servers
只是一个猜测:是否正确设置了“blog.example.com”的DNS-A条目?可能它指向一个错误的目标IP .. – semm0
也许这就是'10.0.0.3:80'所做的。 –
事实上,我在装有proxmox的主机上。所以'localhost'是主要的主机,'10.0.0。*'是proxmox容器......所以10.0.0.3是我的proxmox容器之一。对于DNS,它应该没问题,因为我的容器正在使用主机DNS信息。 –