Ubuntu服务器Nginx部署双网站异常:访问website2跳至website1并报SSL警告
看起来你遇到的核心问题是website2无法正常通过HTTPS访问,反而跳转到HTTP并指向website1,咱们一步步来排查解决:
1. 确认Nginx配置已正确启用
Nginx不会自动加载sites-available目录里的配置文件,必须手动创建软链接到sites-enabled目录才能生效:
# 为website2创建软链接(如果还没做的话) sudo ln -s /etc/nginx/sites-available/website2.com /etc/nginx/sites-enabled/ # 检查配置语法是否正确,避免语法错误导致Nginx启动失败 sudo nginx -t # 重启Nginx让新配置生效 sudo systemctl restart nginx
如果之前没给website2创建软链接,Nginx根本不会加载它的配置规则,所有未匹配的请求都会落到默认站点(刚好是website1),这大概率是你看到跳转至website1的直接原因。
2. 检查SSL证书配置是否正确
访问website2时出现SSL警告,说明证书环节有问题,先做这几项验证:
- 确认
/etc/nginx/ssl/website2.com.domain.crt和/etc/nginx/ssl/website2.com.intermediate.key文件确实存在,并且Nginx进程有权限读取(可以用sudo chmod 644 /etc/nginx/ssl/website2*调整文件权限) - 验证证书和密钥是否配对,执行以下命令:
# 提取证书的模数并生成MD5值 openssl x509 -noout -modulus -in /etc/nginx/ssl/website2.com.domain.crt | openssl md5 # 提取密钥的模数并生成MD5值 openssl rsa -noout -modulus -in /etc/nginx/ssl/website2.com.intermediate.key | openssl md5
如果两个命令输出的MD5值不一致,说明证书和密钥不匹配,需要重新获取正确的配对文件。
3. 修正Node.js代理的协议问题
你的配置里proxy_pass用的是https://127.0.0.1:5000,但如果你的Node.js应用是监听HTTP(而非HTTPS)的话,这会导致Nginx和Node应用之间的通信出错,进而引发跳转异常。
大多数场景下,我们会把SSL终止在Nginx层面,Node应用只需要提供HTTP服务。把website2配置里的proxy_pass改成:
proxy_pass http://127.0.0.1:5000;
同时确认Node.js应用确实在监听5000端口:
sudo netstat -tulpn | grep :5000
如果看不到对应进程,先启动website2的Node应用再测试。
4. 清除浏览器缓存
浏览器对301永久重定向会做长期缓存,可能缓存了旧的跳转规则导致异常。可以尝试用隐私窗口访问website2,或者手动清除浏览器缓存后再测试。
5. 检查默认站点配置
如果以上步骤都没问题,检查Nginx的默认站点(/etc/nginx/sites-enabled/default)是否还在启用状态,如果它没有被禁用,可能会干扰站点匹配逻辑。可以禁用它:
sudo unlink /etc/nginx/sites-enabled/default sudo systemctl restart nginx
按照以上步骤排查后,应该就能解决website2的跳转异常问题,实现两个站点独立正常访问了。
内容的提问来源于stack exchange,提问作者Dave

