nginx重定向所有流量,而不仅仅是server_name

时间:2016-06-28 11:59:03

标签: redirect ssl nginx

我正在使用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

我正在尝试做一些非常简单的事情,所以一定有一些明显的问题,但我看不到它!

1 个答案:

答案 0 :(得分:1)

正如@grochmal所指出的,我认为这是一个简单的缓存问题。通过切换到302 Found重定向而不是301s,并使用新的浏览器,我能够得到正确的结果。

我还纠正了通配符,这可能是最初的问题。