Goのウェブサーバーの前でNginxを使用する利点は何ですか?[閉まっている]


84

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

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


fyiには、ピアによる接続のリセットや、1分間に数百の大きなPOSTリクエストを処理するサービスにGohttpサーバーを使用したI / Oタイムアウトなどの多くのtcpエラーがありました。その前にnginxを置きます-これ以上の問題はありません。
ピーターケリー

最終的に、NGINXなしでGo httpサーバーを使用することにしましたが、非常にうまく機能します。何の問題もなく走っています。しかし、私のサービスはあなたの場合のように大きなPOSTリクエストを実行していません。
ダニエレB

20
これは必ずしも意見に基づくものではありません。そのようにそれを閉じることは、そのような質問への答えが記入して提供することができる考慮事項と警告の深刻な理解の欠如を示しています。選択された答えは良い例です。実際、提供されたすべての回答に関連する新しい考慮事項があります。
vee_ess 2016年

回答:


135

場合によります。

箱から出して、リバースプロキシとしてnginxを前に置くと、次のようになります。

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

Go HTTPサーバーは非常に優れています、これらのいくつかのことを行うには、車輪の再発明必要になります(これは問題ありません。すべての人にすべてを提供することを意図しているわけではありません)。

私はいつも、nginxを前に置いて(それが得意なことです)、「Webサーバー」の処理を実行させる方が簡単だと思っています。My Goアプリケーションは、アプリケーションの処理を実行し、最小限のヘッダーなどのみを実行します。それがする必要があること。nginxを「悪い」ものとして前に置くことを考えないでください。


お返事をありがとうございます!-1)Go HTTPはある種のログを生成しますか?-2)nginxはリクエスト/レスポンスのスループットを何らかの形で低下させますか?
ダニエレB

3
@DanieleB Go HTTPサーバーは、必要なログのみを生成します(つまり、logパッケージを使用します)。IPアドレス、リソースアクセスなどをログに記録する場合は、それを書き込む必要があります。基本を超えて、ヘッダーの設定についても同じことが言えます。具体的なデータはありませんが、Goの前にあるnginxは実際にはGoより遅くないはずです。実際、gzipと独自の最適化のおかげで速くなる可能性があります。「コスト」はより多くのメモリ/ CPU使用率になりますが、nginxはその面でも非常に効率的です。
elithrar 2013

16
もう1つの大きな機能:アプリをどのようにアップグレード/保守しますか(ダウン中にパケットをドロップすることなく)?Nginxを使用すると、パケットを失うことなくトラフィックを誘導できます。
BraveNewCurrency 2013

+ 1、Nginxは独自の場所にあります。
アナトリー

3
私のRaspberryPiでは、Goの前にNginxを配置すると、ページの読み込み速度が大幅に向上しました。
425nesp 2015年

17

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

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

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


はい、実際には動的データの提供にのみ使用しています。だから、私はNGINXは必要ないと思います!お返事ありがとうございます
Daniele B

Varnish / HAProxyは必要ありません。Nginxには、キャッシュと負荷分散のための同様のツールセットがあります。
アナトリー

@mikhailovは私が言ったことではありませんか?nginxはそれに対してうまく機能します。個人的には、VarnishまたはHAproxyを好むことがよくあります。設定と操作が簡単だと思います。
–BjørnHansenに2014

5

ゴリラのWebツールキットはあなたを与えます:

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

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

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

net/http標準ライブラリの中で最も強力なHTTPサーバーがあると思います。


2

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

logHandler(gzipHandler(fileServer))

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.