同服务器 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访问应该能够正确路由到对应的网站内容。