Ubuntu服务器Nginx代理Golang服务返回404问题求助
核心问题定位
从ps aux | grep 8777的输出可以确定:你的Golang服务并未在8777端口监听——返回结果只有grep自身进程,说明没有其他进程占用或监听该端口。你看到的fmt.Println输出仅证明代码执行到了启动前的步骤,但服务实际未成功启动监听,或者启动后立即崩溃退出。
分步排查
检查Golang代码的端口配置
确认代码中http.ListenAndServe的参数是否为:8777,比如:// 正确示例 http.ListenAndServe(":8777", router)如果写成了其他端口(比如
:3000),Nginx代理的8777自然无法命中。验证服务启动后的端口监听状态
手动执行./m启动服务后,保持终端打开,新开一个终端执行:ss -tulpn | grep 8777如果无任何输出,说明服务未成功监听8777端口,需检查代码中是否有启动错误(比如路由注册失败、依赖缺失等)。此时可以直接在启动服务的终端查看是否有报错信息——你之前只关注了启动前的打印,可能忽略了启动时的错误日志。
排查PM2启动的服务状态
用PM2启动的话,执行以下命令查看服务日志和状态:pm2 status pm2 logs <你的PM2应用名称>查看是否有进程崩溃、重启的记录,以及具体的错误信息。
修正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
- 修改Golang路由为
直接测试服务连通性
在服务器本地执行curl命令,直接访问Golang服务的端口:# 根据实际路由调整路径 curl http://localhost:8777/test如果返回404,确认是路由配置问题;如果返回
Connection refused,确认服务未启动监听端口。
内容的提问来源于stack exchange,提问作者Olli1985

