Oracle 云 - golang http 服务器无法在端口 80 上运行
Oracle cloud - golang http server not working on port 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
端口 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 上侦听。
我有一个 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
端口 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 上侦听。