解决Nginx同服务器下未配置SSL站点访问默认站点的问题
描述
Nginx在访问未配置SSL站点的时候会先访问默认配置过SSL的站点。距离A站点配置了SSL,B站点未配置,此时访问B站点的HTTPS则会显示A站点的内容,对于这个问题,官方的说法是:【在未指定SSL默认站点时,未开启SSL的站点使用HTTPS会直接访问到已开启SSL的站点】。但是即使设置了默认站点,还是存在这个问题。
解决方案- - -defalut_server指令
首先了解nginx的查找规则,第一次查找配置文件里有无匹配的域名,如未找到,则查找default_server,如default_server未设置,则默认匹配配置文件排序后的第一个。所以根据规则,我们可以为443端口设置一个无效的default_server来解决这个问题。
以下是配置:
server {
listen 443 default_server;
server_name _ ;
ssl on;
ssl_certificate xxx.crt;
ssl_certificate_key xxx.key;
return 444;
}
注意:以下这两个参数必须填写,否则会导致所有SSL站点无法访问。证书可以为无效也可以为任意。(此处为坑)
ssl_certificate xxx.crt;
ssl_certificate_key xxx.key;