我正在嘗試在 Golang 中創建一個帶有 TLS 的 REST 服務器,但該程序不起作用:http.Handle("/", gorest.Handle())err = http.ListenAndServeTLS(":443", "cert.pem", "key.pem", nil)如果我用非 root 用戶運行它,我會得到listen tcp 127.0.0.1:443: permission denied. 以 root 用戶運行它不會顯示之前的消息,但在調用 ListenAndServeTLS 時會阻止執行。使用的操作系統是 Linux x86_64。有任何想法嗎?
1 回答

喵喔喔
TA貢獻1735條經驗 獲得超5個贊
權限
端口 <= 1024 是特權端口。除非您是 root 或擁有使用它們的明確許可,否則您不能使用它們。請參閱此答案以獲取解釋或維基百科或您更信任的內容。
請參閱此答案以獲取允許您的應用程序打開這些端口而不授予它們超級用戶權限的解決方案(這是一個壞主意)。金錢報價:
sudo setcap 'cap_net_bind_service=+ep' /opt/yourGoBinary
阻塞
ListenAndServe
和它的 TLS 對應ListeAndServeTLS
是阻塞的。
返回的 http 處理程序gorest.Handle()
在/
被訪問時并發執行。如果您希望其他代碼同時運行,請在運行ListeAndServe
或實現不同的 http 處理程序之前啟動一個 goroutine 。
使用 goroutine 的示例:
func printStuff() {
time.Sleep(1 * time.Second)
fmt.Println("foo")
}
func main() {
go printSTuff()
log.Fatal(http.ListeAndServe(":80"))
}
- 1 回答
- 0 關注
- 217 瀏覽
添加回答
舉報
0/150
提交
取消