同服务器 http 定向到https网站 解决办法
当访问https://www.domain1.com时却访问到了www.domain2.com的内容,这是因为您的Nginx配置存在以下问题:
问题原因
缺少HTTPS配置:www.domain1.com的server块只监听了80端口(HTTP),没有监听443端口(HTTPS)
默认SSL服务器:当访问https://www.domain1.com时,Nginx会使用第一个匹配的SSL服务器块,也就是www.domain2.com的配置
解决方案
方案1:为www.domain1.com添加SSL配置
修改www.domain1.com的server块,添加SSL监听和证书配置:
server {
listen 80;
listen [::]:80;
listen 443 ssl;
listen [::]:443 ssl;
server_name www.domain1.com;
# 添加SSL证书配置(使用与www.domain1.com相符的证书)
ssl_certificate /ssl/www.domain1.com/www.domain1.com.pem;
ssl_certificate_key /ssl/www.domain1.com/www.domain1.com.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
# 其余配置保持不变...
}方案2:添加默认SSL服务器块(推荐)
为了防止其他未配置SSL的域名匹配到错误的服务器块,可以添加一个默认SSL服务器:
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /ssl/www.domain2.com/www.domain2.com.pem;
ssl_certificate_key /ssl/www.domain2.com/www.domain2.com.key;
return 444; # 关闭连接或重定向到其他页面
}验证步骤
修改配置后,测试Nginx配置:
Bash
nginx -t
重新加载Nginx配置:
Bash
systemctl reload nginx
测试访问:
https://www.domain1.com 现在应该显示正确的内容
如果访问其他未配置的HTTPS域名,应该会被拒绝或重定向
注意事项
确保/ssl/www.domain2.com/www.domain2.com.pem是一个有效的证书,能够匹配www.domain2.com
如果www.domain1.com需要独立的证书,应该为其配置专用证书
考虑为HTTP访问添加自动跳转HTTPS的配置(如果需要)
通过以上修改,您的HTTPS访问应该能够正确路由到对应的网站内容。


