【问题标题】:nginx redirecting all traffic, not just server_namenginx 重定向所有流量,而不仅仅是 server_name
【发布时间】: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 重定向,一切正常!一定是缓存问题。

标签: redirect ssl nginx


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    相关资源
    最近更新 更多