我有一个应该监听端口的 golang http 服务器80。我的问题是:程序正常编译但不听就退出。当我将端口更改为8080一切正常时,我可以访问我的网页。我使用 Ubuntu 作为我的操作系统。我添加了一个允许端口 80 的入口规则我不明白为什么我的服务器没有监听端口 80 而是监听所有其他端口。谢谢您的帮助。package mainimport ( "fmt" "net/http")func hello(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "<p>Hello world!</p>")}func main() { http.HandleFunc("/", hello) http.ListenAndServe(":80", nil)}
2 回答
慕侠2389804
TA贡献1719条经验 获得超6个赞
检查错误
err := http.ListenAndServe(":80", nil)
fmt.Println(err)
我本地的输出是这样的,但它可能有其他原因
listen tcp :80: bind: permission denied
绝地无双
TA贡献1946条经验 获得超4个赞
端口 80 是保留/特殊端口,在许多(如果不是全部)Linux / Unix 系统上必须通过 root 级用户访问。您需要以 root / wheel group / sudo 用户身份运行它。或者您可以在 8080 上运行它,并通过在 systemd 上具有根级别的东西(如 nginx 或类似的东西)进行反向代理。这是 Web 应用程序和代理转发的常见使用模式。
我建议不要让你的 golang 二进制文件以 root 身份运行,因为如果没有为以 root 身份运行的用户提供其他保护措施,这根本不安全。
nginx片段:
location / {
proxy_pass http://0.0.0.0:8080;
}
要确认这是问题所在,您可以运行它sudo ./mybinary并确认它在 80 上工作并收听。
- 2 回答
- 0 关注
- 242 浏览
添加回答
举报
0/150
提交
取消