web-dev-qa-db-ja.com

GoのWebサーバーの前でNginxを使用する利点は何ですか?

多くのユーザーがいるJSONデータを返すいくつかのWebサービスを書いています。

Go httpサーバーを使用する場合と比較して、サーバーの前でNginxを使用する利点は何ですか?

76
Daniele B

場合によります。

箱から出して、nginxをリバースプロキシとして前面に配置すると、次のことが可能になります。

  • アクセスログ
  • エラーログ
  • 簡単なSSL終了
  • SPDYサポート
  • gzipサポート
  • 数行で特定のルートのHTTPヘッダーを設定する簡単な方法
  • 非常に高速な静的アセットの提供(ただし、S3などを提供している場合、これは関係ありません)

Go HTTPサーバーは非常に優れていますが、willこれらのことのいくつかを行うために車輪を再発明する必要があります(これは素晴らしいことです。

私は、nginxを前面に配置するのがずっと簡単で、これが得意なことです。私のGoアプリケーションは、アプリケーションのようなことを行い、最小限のヘッダーなどのみを行います。それが必要です。 nginxを「悪い」ものとして前に置くことを見てはいけません。

126
elithrar

Goの標準のhttpサーバーは問題ありません。アプリケーションがほとんど/唯一の「動的な」要求/応答である場合、それが本当に最良の方法です。

Nginxを使用して静的アセットを提供することもできますが、ほとんどの場合、標準のGoでも問題ありません。より高いパフォーマンスが必要な場合は、Varnishでできる限りCDNまたはキャッシュを使用する必要があります(たとえば)。

同じIPアドレスから異なるアプリケーションを提供する必要がある場合、nginxはプロキシが異なるアプリケーション間でリクエストを分散するための適切な選択です。私はより頻繁にそのようなことのためにツールボックスからVarnishまたはHAProxyを取り出します。

17

Gorilla web toolkit は以下を提供します:

  • 高度なルーティング(ドメイン/サブドメインの制限、正規表現パスの一致)。
  • gzipサポート( ミドルウェアハンドラー 経由)
  • Apache Common Log Formatで出力するロギングミドルウェアハンドラー。
  • 暗号化されたCookieを保護します。
  • セッション。
  • schemaパッケージは、フォームの値を構造体に変換します。

これは、Goのnet/httpとNGINXのようなHTTPサーバーとの間のギャップを埋めます。

個人的には、代わりにCDNをプラグインできることがわかっていれば、net/httpの上に別のHTTPサーバーをインストールして構成することは避けます。

net/httpは、標準ライブラリで最も強力なHTTPサーバーを持っていると思います。

5
Moshe Revah

https://blog.gopheracademy.com/caddy-a-look-inside/ から、Goはgzip、エラー、静的ファイル、ルーティング、httpヘッダーをミドルウェアを使用して処理できるようです。ブログの以下の行は、このようなリクエストをどのように処理するかを示しています。

logHandler(gzipHandler(fileServer))

彼らは本当に興味深い方法でエラーログを処理します。ミドルウェアがエラーコード(int)を返す限り、エラー処理ミドルウェアが自動的に処理します。 NginxのようにGoでサイト全体を設定することまで行ってきました。 「すべてのGopher Academy Webサイトのnginx.confファイルの長さは115行を超えていました。同等のCaddyfileは50行のみです。」

2
Kevin K