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

NGINX无法连接已运行的后端服务,请求提示连接被拒绝

NGINX无法连接已运行的后端服务,请求提示连接被拒绝

看起来你第一次部署网站就碰到了NGINX和后端服务连通的麻烦,别着急,咱们一步步排查问题。从你贴的NGINX错误日志:

2024/11/29 10:36:48 [error] 901#901: *9 connect() failed (111: Connection refused) while connecting to upstream, client: 172.69.121.138, server: avery-insights.icu, request: "POST /auth/signup HTTP/1.1", upstream: "http://127.0.0.1:5000/auth/signup", host: "avery-insights.icu"

能明确核心问题:NGINX尝试连接127.0.0.1:5000时被拒绝了,哪怕你本地运行完全正常。下面是几个常见的排查方向:

  • 先确认后端服务真的在监听127.0.0.1:5000吗?
    本地跑没问题不代表服务器上的后端绑定了正确地址。很多时候开发时服务绑定127.0.0.1,但部署后如果只绑定回环地址,或者不小心绑定了其他网卡地址,NGINX就连不上。你可以在服务器上执行命令:

    netstat -tulpn | grep 5000
    # 或者用更现代的ss命令
    ss -tulpn | grep 5000
    

    看看输出里有没有进程在监听5000端口,且监听地址是0.0.0.0(允许所有地址访问)或者127.0.0.1(仅限本地)。如果看不到相关进程,那就是服务没启动对。

  • 检查后端服务是否真的在服务器上正常运行
    别只看控制台没输出,可能服务启动失败了只是你没抓到错误。你可以用这个命令看看进程是否存在:

    ps aux | grep 你的后端进程名
    

    另外别忘了查看后端服务的日志文件(如果有配置的话),确认服务确实启动成功且没有崩溃。

  • 优化你的NGINX配置(虽然不是直接导致连接拒绝的原因,但能避免后续问题)
    你现在的配置是单个路径的转发,其实可以简化成针对整个/auth前缀的转发,更灵活:

    location /auth {
        proxy_pass http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    

    另外你配置里的Upgrade和Connection 'upgrade'是给WebSocket用的,如果你的后端只是普通HTTP API,完全可以去掉这些头,避免不必要的干扰。

  • 检查服务器防火墙/安全组是否拦截了5000端口
    哪怕后端监听了5000端口,服务器的防火墙(比如ufw、iptables)或者云服务商的安全组如果没允许本地访问5000端口,也会导致连接被拒绝。你可以临时关闭防火墙测试一下,或者添加规则允许127.0.0.1访问5000端口:

    # 以ufw为例
    sudo ufw allow in from 127.0.0.1 to any port 5000
    
  • 排查后端服务的运行权限问题
    虽然5000是非特权端口(大于1024),非root用户也能绑定,但如果后端服务依赖的文件/资源权限不足,也可能导致服务启动后无法正常监听端口。可以看看服务启动时的日志有没有权限相关的报错。

先从上面这几点入手排查,应该能找到问题所在。

备注:内容来源于stack exchange,提问作者huy huy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 11:32:58