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

Oracle cloud - golang http server not working on port 80

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

我的问题是:

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

我不明白为什么我的服务器不在端口 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)
}

检查错误

err := http.ListenAndServe(":80", nil)
fmt.Println(err)

我本地的输出是这样的,但可能有其他原因

listen tcp :80: bind: permission denied

端口 80 是保留/特殊端口,在许多(如果不是全部)Linux/Unix 系统上必须通过根级别用户访问。您需要 运行 它作为 root / wheel 组 / sudo 用户。或者你可以 运行 它在 8080 上,并通过在 systemd 上有根级别的东西反向代理,比如 nginx 或类似的东西。这是 Web 应用程序和代理转发的常见使用模式。

我建议不要将您的 golang 二进制文件 运行 作为 root 用户,因为如果没有针对 运行ning 作为 root 用户的其他保护措施,这根本不安全。

nginx 片段:

  location / {
    proxy_pass http://0.0.0.0:8080;
}

要确认这是问题所在,您可以 运行 将其设置为 sudo ./mybinary 并确认它可以正常工作并在 80 上侦听。