NGINX反向代理NodeJS版ShareX上传服务返回localhost而非域名问题求助
问题根因
这是NGINX反向代理配置缺失导致的问题,和业务代码无关:
- 你当前配置中未将客户端请求的原始Host头传递给上游NodeJS服务,NodeJS的
req.hostname默认读取的是NGINX发往上游请求的Host值,也就是proxy_pass中填写的localhost:1337,因此会返回localhost作为域名 - 你已经排除Cloudflare侧问题,只需要修改NGINX配置补全请求头传递即可
修复方案
1. 修改NGINX配置
找到location /块,补充Host、X-Forwarded-*相关请求头配置,修改后的配置如下:
location / { proxy_pass http://localhost:1337/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 保留原有配置 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_set_header Accept-Encoding gzip; }
配置修改完成后执行nginx -s reload重载配置即可生效。
2. 可选配置(避免后续协议异常)
如果你的NodeJS服务使用Express框架,可以在服务启动代码中添加如下配置,信任反向代理传递的请求头,即可自动识别HTTPS协议、客户端真实IP等信息:
app.set('trust proxy', 1);
如果是Koa框架,可使用对应代理中间件配置信任代理。
验证方法
重载NGINX后重新发起上传请求,检查req.hostname取值已变为example.com,返回的图片链接域名符合预期即可。
内容的提问来源于stack exchange,提问作者Johnty
相关产品推荐
相关产品推荐

