Nginx配置问题:无法显示域名而非服务器IP地址
解决Nginx反向代理后地址栏显示服务器IP而非域名的问题
嘿,我看你遇到的问题主要是Nginx配置里的几个关键点没到位,再加上可能后端服务的小细节没注意。咱们一步步来修复:
1. 先把Nginx的server_name改对
你现在用的server_name _;是默认匹配所有请求的通配符,这会让Nginx没法精准识别你的域名请求,后端拿到的Host信息也可能不对。直接把它换成你的实际域名就行,比如:
server { keepalive_timeout 30; listen server_ip:443 ssl; ssl_certificate /tmp/mycrt.crt; ssl_certificate_key /tmp/mykey.key; ssl_session_cache shared:SSL:10m; # 这里建议把老旧的TLS版本去掉,只留TLSv1.2和TLSv1.3更安全 ssl_protocols TLSv1.2 TLSv1.3; ssl_session_timeout 10m; # 替换成你的域名,带www的也加上,避免漏匹配 server_name mydomain.com www.mydomain.com; location / { proxy_pass http://server_ip:8000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; # 这两个头可选,但加上能让后端拿到真实客户端IP和协议类型 proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_cache_bypass $http_upgrade; } }
2. 加上HTTP转HTTPS的强制跳转
很多用户会直接输http://你的域名,如果没有跳转规则,可能会触发后端的IP跳转。新增一个80端口的server块来处理:
server { listen server_ip:80; server_name mydomain.com www.mydomain.com; # 301永久重定向到HTTPS,保持原请求路径 return 301 https://$host$request_uri; }
3. 检查Node.js应用的重定向代码
如果上面两步改完还是跳IP,那大概率是你的Node.js API里硬编码了服务器IP的重定向。比如你可能写了:
// 错误写法:硬编码IP res.redirect('https://server_ip/api/xxx');
改成相对路径或者动态获取请求的域名:
// 推荐:用相对路径,自动继承当前域名 res.redirect('/api/xxx'); // 或者动态获取Host头 const host = req.get('host'); res.redirect(`https://${host}/api/xxx`);
4. 验证配置并重启Nginx
改完配置先检查有没有语法错误:
nginx -t
如果提示ok和successful,就重启Nginx让配置生效:
systemctl restart nginx
这样调整后,访问你的域名时地址栏就会一直显示mydomain.com,不会跳成服务器IP啦。
内容的提问来源于stack exchange,提问作者proquibas
相关产品推荐
相关产品推荐

