私は、FastCGI接続にTCPの代わりにUnixソケットを使用して、Nginxを非常に効果的に使用しています。このコードスニペットはMannersから来ますが、通常のGo APIに対しても非常に簡単に適用できます。
func isUnixNetwork(addr string) bool {
return strings.HasPrefix(addr, "/") || strings.HasPrefix(addr, ".")
}
func listenToUnix(bind string) (listener net.Listener, err error) {
_, err = os.Stat(bind)
if err == nil {
// socket exists and is "already in use";
// presume this is from earlier run and therefore delete it
err = os.Remove(bind)
if err != nil {
return
}
} else if !os.IsNotExist(err) {
return
}
listener, err = net.Listen("unix", bind)
return
}
func listen(bind string) (listener net.Listener, err error) {
if isUnixNetwork(bind) {
logger.Printf("Listening on unix socket %s\n", bind)
return listenToUnix(bind)
} else if strings.Contains(bind, ":") {
logger.Printf("Listening on tcp socket %s\n", bind)
return net.Listen("tcp", bind)
} else {
return nil, fmt.Errorf("error while parsing bind arg %v", bind)
}
}
スイッチングはUnixドメインソケット経由のTCP接続およびFastCGIを介してHTTPの間で発生した場所である、およそline 252周りを見てみましょう。
Unixソケットでは、ソケットが適切な所有権と権限を持って整然とした方法で作成されるように、起動スクリプトを調整する必要があります。あなたがその権利を得るならば、残りは簡単です。
あなたはnginxのを使用する理由について他の発言に答えるために、それは常にあなたのユースケースに依存します。私はNginxがホストする静的/ PHPウェブサイトを持っています。そのような場合に同じサーバ上のリバースプロキシとして使用すると便利です。
プロキシとしてnginx、実際のビジネスサーバーを作るプログラミング言語としてgolang、大丈夫です。あなたの問題は何ですか? –
http://nf.id.au/posts/2010/10/deploying-go-web-services-behind-nginx-under.htmlを参照してください。 –