2

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 を呼び出すと実行がブロックされます。使用OSはLinux x86_64です。何か案は?

4

1 に答える 1

9

権限

ポート <= 1024 は特権ポートです。root であるか、それらを使用するための明示的な許可がない限り、それらを使用することはできません。説明やウィキペディア、またはより信頼できるものについては、この回答を参照してください。

アプリケーションがスーパーユーザーのアクセス許可を与えずにこれらのポートを開くことを許可する解決策については、この回答を参照してください (これは悪い考えです)。お金の見積もり:

sudo setcap 'cap_net_bind_service=+ep' /opt/yourGoBinary

ブロッキング

ListenAndServeおよび対応する TLSListeAndServeTLSがブロックされています。

から返される http ハンドラは、アクセスgorest.Handle()時に同時に実行され/ます。他のコードを同時に実行したい場合は、実行する前にゴルーチンを開始するListeAndServe か、別の http ハンドラーを実装します。

ゴルーチンを使用した例:

func printStuff() {
    time.Sleep(1 * time.Second)
    fmt.Println("foo")
}

func main() {
    go printSTuff()
    log.Fatal(http.ListeAndServe(":80"))
}
于 2013-10-09T18:35:52.517 に答える