为了账号安全,请及时绑定邮箱和手机立即绑定

Oracle 云 - golang http 服务器无法在端口 80 上运行

Oracle 云 - golang http 服务器无法在端口 80 上运行

Go
慕的地6264312 2022-10-10 15:22:33
我有一个应该监听端口的 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


查看完整回答
反对 回复 2022-10-10
?
绝地无双

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 上工作并收听。


查看完整回答
反对 回复 2022-10-10
  • 2 回答
  • 0 关注
  • 242 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信