我正在使用 nginx 作为多个节点服务器的反向代理。我最近将 SSL 添加到其中一个项目。
我的配置看起来有点像这样:
# domain1
server {
listen 443 ssl;
server_name *.domain1.com
location / {
proxy_pass http://123.456.789.012:3001;
# ... other proxy stuff
}
}
server {
listen 80;
server_name *.domain1.com;
return 301 https://$host$request_uri;
}
这对 domain1 非常有效。 HTTPS 有效,HTTP 重定向到 HTTPS。
但是,这以某种方式影响了同一服务器上的另一个 域。这是它的配置:
# domain2
server {
listen 80;
server_name *.domain2.com;
location / {
proxy_pass http://123.456.789.012:3002;
# ... all the other proxy stuff
}
}
发生的事情是,当我转到 http://domain2.com 时,我被重定向到 https://domain2.com ,它提示说我没有该域的 SSL 证书。
当我从 domain1 中删除第二个服务器 block 时,将 80 上的流量转发到 https 的服务器 block ,domain2 再次工作。
在我看来,nginx 忽略了 server_name
属性,并将所有流量转发到 HTTPS。我也尝试过使用硬 URL:
server_name domain1.com www.domain1.com
我正在尝试做一些非常简单的事情,所以一定有一些明显的问题,但我看不到!
最佳答案
正如@grochmal 所指出的,我相信这是一个简单的缓存问题。通过切换到 302 Found 重定向而不是 301,并使用新的浏览器,我能够获得正确的结果。
我还更正了通配符,这可能是原来的问题。
关于redirect - nginx 重定向所有流量,而不仅仅是 server_name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38075635/