我的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 doc上看过这个。这可能是问题的原因。
使用此配置,浏览器会收到默认服务器的证书,即www.example.com,无论请求的服务器名称如何。这是由SSL协议行为引起的。在浏览器发送HTTP请求之前建立SSL连接,并且nginx不知道所请求服务器的名称。因此,它可能只提供默认服务器的证书。
答案 0 :(得分:0)
最后,原因是我的证书仅适用于var c = document.getElementById("predefinedMessage");
var id= parseInt(c.selectedIndex) ;
var text= "{{ form.predefinedMessage.vars.choices[id].data.message }}";
,而不适用于example.com
。所以它不匹配子域,我被重定向到第一个可用的SSL配置(这是example.com)。所以我在我的证书中添加了*.example.com
以允许subjectAltName
。
然后我还将我的证书声明的定义直接更改为Nginx配置的*.example.com
部分,以用于缓存目的。这是我的最终配置:
html