【发布时间】:2016-10-30 17:55:46
【问题描述】:
我正在使用 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
我正在尝试做一些非常简单的事情,所以肯定有一些明显的问题,但我看不到!
【问题讨论】:
-
首先,你有
default_server(如listen 80 default_server)吗?其次,你确定你销毁了浏览器缓存吗?301s 被浏览器缓存,你应该在测试配置时使用302s。第三,*.domain2.com不会捕捉到domain2.com,你应该使用.domain2.com(不带星号)。 -
谢谢@grochmal!我删除了星号并切换到
302重定向,一切正常!一定是缓存问题。