前言

晚上折腾服务器,突然发现报错,所有的服务器请求都被指向默认站点,于是回想上次对服务器的操作,嗯,监听IPV6.那么主站既然没问题,那么应该别的站就都没问题啊,其实不然,主站监听,默认是全部监听,也就是说其他域名发来的数据,属于无法找到目标站点,被统一发往主站了。于是开始寻找多IPV6配置方法,开始踩坑之旅......

重点:错误问题其实就是证书SNI问题,如果你的站点没有SSL,但是其他站点有SSL,那么你访问那个没被配置SSL的站点就会发生SSL错误。(因为当今主流浏览器默认访问443而不是80)

折腾尝试1

服务器1的配置

server
{
listen 80;
listen 443 ssl http2;
listen [::]:80 ipv6only=on;
listen [::]:443 ipv6only=on ssl http2;
server_name kiyoka.moe;
index index.php ;
root /www/wwwroot/;

}

 

 

服务器2的配置

server
{
listen 80;
listen 443 ssl http2;
server_name www.sakurabakiyoka.com;
index index.php ;
root /www/wwwroot/;

}

 

是这种情况开始出现问题,那么开始尝试监听IPV6

服务器2改为

server
{
listen 80;
listen 443 ssl http2;
listen [::]:80 ipv6only=on;
listen [::]:443 ipv6only=on ssl http2;
server_name www.sakurabakiyoka.com;
index index.php ;
root /www/wwwroot/;
}

 

开始测试nginx

报错!

Excuse Me??

折腾尝试2

服务器2改为

server
{
listen [::]:80;
listen [::]:443 ssl http2;
server_name www.sakurabakiyoka.com;
index index.php ;
root /www/wwwroot/;
}

 

恢复正常了,但是问题又来了,IPV4的请求又接不到了.....

成功的尝试

服务器2改为

server
{
listen 80;
listen 443 ssl http2;
listen [::]:80 ;
listen [::]:443 ssl http2;
server_name www.sakurabakiyoka.com;
index index.php ;
root /www/wwwroot/;
}

 

原因:去掉ipv6only=on即可,因为这个是一次性参数,在一个文件里存在,在第二个,第三个往后的文件不需要写入这个参数....

完美解决问题,IPV4 IPV6正常访问,而且没有出现SSL证书错误。


你是否会像清风拂过花儿一样与我相遇呢?