我正在使用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删除第二个服务器块时,将80上的流量转发到https,domain2再次运行。
在我看来,nginx忽略了server_name
属性,并将所有流量转发到HTTPS。我也尝试过使用硬URL:
server_name domain1.com www.domain1.com
我正在尝试做一些非常简单的事情,所以一定有一些明显的问题,但我看不到它!
答案 0 :(得分:1)
正如@grochmal所指出的,我认为这是一个简单的缓存问题。通过切换到302 Found重定向而不是301s,并使用新的浏览器,我能够得到正确的结果。
我还纠正了通配符,这可能是最初的问题。