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

我有一个应该监听端口的 golang http 服务器80

我的问题是:

程序正常编译但不听就退出。当我将端口更改为8080一切正常时,我可以访问我的网页。

  • 我使用 Ubuntu 作为我的操作系统。

  • 我添加了一个允许端口 80 的入口规则

我不明白为什么我的服务器没有监听端口 80 而是监听所有其他端口。

谢谢您的帮助。

package main


import (

    "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)

}


慕的地6264312
浏览 243回答 2
2回答

慕侠2389804

检查错误err := http.ListenAndServe(":80", nil)fmt.Println(err)我本地的输出是这样的,但它可能有其他原因listen tcp :80: bind: permission denied

绝地无双

端口 80 是保留/特殊端口,在许多(如果不是全部)Linux / Unix 系统上必须通过 root 级用户访问。您需要以 root / wheel group / sudo 用户身份运行它。或者您可以在 8080 上运行它,并通过在 systemd 上具有根级别的东西(如 nginx 或类似的东西)进行反向代理。这是 Web 应用程序和代理转发的常见使用模式。我建议不要让你的 golang 二进制文件以 root 身份运行,因为如果没有为以 root 身份运行的用户提供其他保护措施,这根本不安全。nginx片段:&nbsp; location / {&nbsp; &nbsp; proxy_pass http://0.0.0.0:8080;}要确认这是问题所在,您可以运行它sudo ./mybinary并确认它在 80 上工作并收听。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go