Nginx将子域foo重定向到www.foo到www.www.foo等

隆尼克斯

我只是将配置从常规证书更改为通配符证书。现在我的nginx行为异常。

# redirect http to https
server {
  listen      80 default_server;
  listen      [::]:80 default_server;
  return      301 https://$host$request_uri;
}

# redirect naked to www
server {
  listen      443 ssl http2;
  listen      [::]:443 ssl http2;
  server_name example.com;
  include     ssl.conf;
  return      301 https://www.$host$request_uri;
}

# serve subdomain www
server {
  listen      443 ssl http2;
  listen      [::]:443 ssl http2;
  server_name www.example.com;
  include     ssl.conf;
  # ...
}

# serve subdomain mmm
server {
  listen      443 ssl http2;
  listen      [::]:443 ssl http2;
  server_name mmm.example.com;
  include     ssl.conf;
  # ...
}

# ...etc.

上面的方法有效,但是对于不存在的子域无效(而不是返回404)。因此,如果尝试notexist.example.com,它将重定向到www.notexist.example.com并给我证书警告。如果单击“确定”,它将重定向到www.www.notexist.example.com,然后重定向到www.www.www.notexist.example.com,等等。

我究竟做错了什么?

伊沃·格洛夫

既然你想赶上所有不存在的子域,你需要在最后一个额外的服务器块,标记为默认-样listen 443 ssl default_server;server_name该块无所谓-只要它不匹配任何其他服务器块(这样你就可以只需使用server_name _;

尚未由另一个服务器块处理的任何域都将由默认域处理-您可以重定向到规范域或仅返回404。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章