我有一個 golang http 服務器,它應該監聽 port 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)
}
uj5u.com熱心網友回復:
檢查錯誤
err := http.ListenAndServe(":80", nil)
fmt.Println(err)
我本地的輸出是這個,但它可能有其他原因
listen tcp :80: bind: permission denied
uj5u.com熱心網友回復:
埠 80 是一個保留/特殊埠,必須在許多 Linux/Unix 系統(如果不是所有)上通過 root 級別用戶訪問。您需要以 root/wheel 組/sudo 用戶身份運行它。或者您可以在 8080 上運行它,并通過在 systemd 中具有根級別的東西(如 nginx 或類似的東西)進行反向代理。這是 Web 應用程式和代理轉發的常見使用模式。
我建議不要讓您的 golang 二進制檔案以 root 身份運行,因為如果沒有為以 root 身份運行的用戶提供其他保護措施,這根本不安全。
nginx 片段:
location / {
proxy_pass http://0.0.0.0:8080;
}
要確認這是問題所在,您可以將其作為運行sudo ./mybinary并確認它在 80 上作業和偵聽。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/334907.html
標籤:走 oracle-cloud-infrastructure 80端口
