Oracle cloud - 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)
}

检查错误

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

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

listen tcp :80: bind: permission denied

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

我建议不要以root用户身份运行您的golang二进制文件,因为如果没有其他保护措施,对于以root用户运行的用户来说,这根本不安全。

nginx片段:

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

要确认这是问题,您可以作为sudo ./mybinary运行它,并确认它工作并监听80。

相关内容

  • 没有找到相关文章

最新更新