我只是将配置从常规证书更改为通配符证书。现在我的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] 删除。
我来说两句