You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJs在DigitalOcean上req.get('host')返回localhost:3000而非域名如何解决?

修复Node.js中req.get('host')返回localhost:3000的问题

常见场景:使用Nginx反向代理

如果你的Node.js服务通过Nginx反向代理对外提供访问,问题根源是Nginx未转发真实的Host请求头,需修改Nginx配置:

  • 找到域名对应的Nginx配置文件,通常路径为/etc/nginx/sites-available/你的域名.conf
  • 在配置文件的location /代码块内添加以下两行:
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Host $host;
    
  • 保存配置后,重启Nginx服务生效:
    sudo systemctl restart nginx
    

无反向代理的直接部署场景

如果Node.js服务直接暴露公网访问,需检查两处配置:

  1. 修改Node.js代码的监听地址,将localhost改为0.0.0.0,确保服务监听所有网卡:
    app.listen(3000, '0.0.0.0', () => {
      console.log('服务已启动');
    });
    
  2. 确认域名已正确解析到Droplet的公网IP,且Droplet防火墙开放了服务使用的端口(比如3000)。

原理说明

req.get('host')读取的是HTTP请求头中的Host字段。若反向代理未转发该字段,Node.js会获取到服务本地监听的localhost:3000;直接部署时若绑定localhost,服务仅能接收本地请求,外部通过域名访问时无法识别真实域名。

内容的提问来源于stack exchange,提问作者Chidozie Duru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 10:16:02