Nginx同服务器多域名配置故障:访问域名异常跳转至someapp.com反向代理
问题原因
- 浏览器协议默认优先级逻辑:现代浏览器在用户输入不带协议的域名时,会优先尝试使用HTTPS协议发起请求,而非HTTP。
- Nginx 443端口无对应站点配置:当前配置中443 ssl端口仅配置了
someapp.com对应的server块,当example1.com、example2.com的HTTPS请求到达服务器时,Nginx无法匹配到对应域名的server块,会默认使用第一个加载的443端口server块(即someapp.com的配置)响应请求,因此会展示someapp的站点内容。 - 可能存在301永久重定向缓存:如果之前配置过错误的跳转规则,301作为永久重定向会被浏览器长期缓存,也会触发异常跳转。
修复方案
方案1:为example1、example2配置HTTPS(推荐)
先为两个域名申请SSL证书(可使用Let's Encrypt免费证书),然后在Nginx配置中添加对应443端口的server块:
example1.com 443配置示例
server { listen 443 ssl; server_name example1.com; # 替换为对应域名的SSL证书实际路径 ssl_certificate /etc/letsencrypt/live/example1.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example1.com/privkey.pem; location / { proxy_pass 'http://127.0.0.1:5000'; } }
example2.com 443配置示例
server { listen 443 ssl; server_name example2.com; # 替换为对应域名的SSL证书实际路径 ssl_certificate /etc/letsencrypt/live/example2.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example2.com/privkey.pem; root /home/user/example2; index index.html; location / { try_files $uri $uri/ =404; } }
配置完成后执行nginx -s reload重载配置即可生效。
方案2:无需HTTPS的临时修复
如果暂时不需要为两个站点配置HTTPS,可以在443端口新增默认server块,将所有非someapp.com的HTTPS请求强制跳转到对应HTTP站点:
# 放在所有443 server块的最前面,作为443端口默认响应规则 server { listen 443 ssl default_server; server_name _; # 可使用现有someapp的证书完成SSL握手,也可使用自签证书 ssl_certificate /etc/letsencrypt/live/someapp.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/someapp.com/privkey.pem; return 301 http://$host$request_uri; }
配置完成后执行nginx -s reload重载配置即可。
注:修改配置后建议使用浏览器无痕模式测试,避免本地旧的301重定向缓存干扰验证结果。
内容的提问来源于stack exchange,提问作者Sir Rubberduck
相关产品推荐
相关产品推荐

