【发布时间】:2016-01-19 17:15:05
【问题描述】:
我的 nginx 配置中有三个不同的 proxy_pass。其中两个重定向到 https 主机,最后一个通过标准端口 80。
前两个(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 不知道请求的服务器的名称。因此,它可能只提供默认服务器的证书。
【问题讨论】:
-
只是猜测:是否为“blog.example.com”正确设置了 DNS-A 条目?可能是指向了错误的目标IP..
-
10.0.0.3:80可能就是这样做的。 -
其实我在安装proxmox的主机上。所以
localhost是主要主机,10.0.0.*是 proxmox 容器......所以 10.0.0.3 是我的 proxmox 容器之一。对于 DNS,应该没问题,因为我的容器正在使用主机 dns 信息。
标签: redirect ssl nginx proxypass