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

Ubuntu服务器Nginx代理Golang服务返回404问题求助

问题排查与解决步骤

核心问题定位

从ps aux | grep 8777的输出可以确定:你的Golang服务并未在8777端口监听——返回结果只有grep自身进程,说明没有其他进程占用或监听该端口。你看到的fmt.Println输出仅证明代码执行到了启动前的步骤,但服务实际未成功启动监听,或者启动后立即崩溃退出。

分步排查

  1. 检查Golang代码的端口配置
    确认代码中http.ListenAndServe的参数是否为:8777,比如:

    // 正确示例
    http.ListenAndServe(":8777", router)
    

    如果写成了其他端口(比如:3000),Nginx代理的8777自然无法命中。

  2. 验证服务启动后的端口监听状态
    手动执行./m启动服务后,保持终端打开,新开一个终端执行:

    ss -tulpn | grep 8777
    

    如果无任何输出,说明服务未成功监听8777端口,需检查代码中是否有启动错误(比如路由注册失败、依赖缺失等)。此时可以直接在启动服务的终端查看是否有报错信息——你之前只关注了启动前的打印,可能忽略了启动时的错误日志。

  3. 排查PM2启动的服务状态
    用PM2启动的话,执行以下命令查看服务日志和状态:

    pm2 status
    pm2 logs <你的PM2应用名称>
    

    查看是否有进程崩溃、重启的记录,以及具体的错误信息。

  4. 修正Nginx代理的路由匹配
    当前Nginx配置中,location /api/对应的proxy_pass http://localhost:8777会把https://website.com/api/test转发到http://localhost:8777/test。如果你的Golang服务注册的路由是/api/test而非/test,就会返回404。
    解决方法二选一:

    • 修改Golang路由为/test
    • 修改Nginx的proxy_pass为http://localhost:8777/api/(注意末尾的斜杠),这样请求会转发到http://localhost:8777/api/test
  5. 直接测试服务连通性
    在服务器本地执行curl命令,直接访问Golang服务的端口:

    # 根据实际路由调整路径
    curl http://localhost:8777/test
    

    如果返回404,确认是路由配置问题;如果返回Connection refused,确认服务未启动监听端口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 18:34:52