Nginx server_name& listen匹配指定的模式

时间:2015-12-18 09:34:55

标签: nginx

在此示例中,域名已被domain.com替换

我们的主要问题: 当我输入https://domain.com时,我没有被重定向到https://www.domain.com,我们目前没有针对此的规则,这是解决此问题的最佳方法吗?

根据我们的nginx配置,我们没有为https://domain.com指定443,但仍然可以访问,为什么会这样?

我们拥有domain.com和www.domain.com的有效ssl证书。 我们没有通配符证书* .domain.com。

我们的配置:

#All non-matching patterns
server
{
  listen 80;

  #enabling this will cause things to break.
  #2015/12/18 09:21:54 [error] 32165#0: *1661 no "ssl_certificate" is defined in server listening on SSL port while SSL handshaking, client: *censored*, server: 0.0.0.0:443
  #listen 443 ssl;

  #Horrible looking match all pattern.
  server_name _ "" domain.com *.domain.com;

  return 301 https://www.domain.com$request_uri;
}

#Main site ssl enforced
server
{
  listen 443 ssl;

  server_name www.domain.com ios.domain.com android.domain.com;

  ...
}

#Staging / Test site
server
{
  listen 443 ssl;
  listen 80;

  server_name stage.domain.com;

  ...
}

#Rental cars site ssl enforced
server
{
  listen 443 ssl;

  server_name hyrbil.domain.com;

  ...
}

#ios redirect to enforce https
server
{
  listen 80;

  server_name ios.domain.com;

  return 301 https://ios.domain.com$request_uri;
}

#android redirect to enforce https
server
{
  listen 80;

  server_name android.domain.com;

  return 301 https://android.domain.com$request_uri;
}

奖金问题: 是否可以匹配所有ssl流量并进行重定向,除非它与特定域匹配,例如make https://xxx.domain.com将301传递给https://www.domain.com,即使我没有xxx.domain证书也是如此。 com没有显示“此页面不安全,您确定要继续”吗?

1 个答案:

答案 0 :(得分:0)

如果您有一个虚拟主机在443上侦听,那么到达您的IP地址的所有流量都将由该虚拟主机提供服务。

为domain.com创建一个SSL虚拟主机,并在其中添加一个简单的重定向。

或者创建一个" catch all / default" SSL虚拟主机,检查HOST标头并重定向,如:

if ($host !~* ^www\.doman\.com$) { rewrite ^(.*)$ http://www.domain.com$1 permanent; } 但它会在证书中未包含的所有FQDN上显示SSL证书错误!