2020年11月

同一台服务器Nginx防止未配置SSL证书的站点通过https访问跳转到配置了SSL(https)证书的站点

服务器:CentOS
环境:Nginx+MySQL+PHP

之前在这台服务器上配置了多个vhost站点,其中有一个还配好了SSL证书(https访问),其他站点都没配置。今天有个同事发现,当通过https访问其中一个未配置ssl证书的网站时,浏览器(谷歌、火狐都会)会提示证书风险,选择继续访问后,内容却是配置了ssl证书的那个站点。

后来查询得知,通过https协议访问未配置ssl证书的站点时,默认会跳转到一个(如果配置了的话)https站点,要禁止这种跳转,需要配置一个默认ssl(无效的也可以)server,具体如下:

server {
 listen 443 default_server;
 server_name _ ;
 ssl on;
 ssl_certificate crt/1_xxxx.com_bundle.crt; # 这里可以是无效的证书
 ssl_certificate_key crt/2_xxxx.com.key; # 这里可以是无效的证书
 return 301 http://$host$request_uri; # 跳转到http协议访问
}

最后一句(return)强制把未配置ssl证书的https访问都跳转到http协议上,问题解决。
这是目前得到的解决方案,如果还有更好的,欢迎大家指出!