2013-07-21 10 views
63

私は、多くのユーザーを持つJSONデータを返すWebサービスをいくつか書いています。Go(golang)webservices:NGINXを使用しているかどうか?

WebサーバーとしてNGINXを使用することをお勧めしますか、Goの標準httpサーバーを使用するのに十分ですか?

+0

fyi、ピアによる接続リセットのようなtcpエラーが多かったし、大量のPOST要求を100分処理するサービスのためにGo http serverを使用して1分のI/Oタイムアウト。それの前にnginxを置く - それ以上の問題。 –

+0

最終的に、Go http serverをNGINXなしで使用することに決めました。これはとてもうまく動作します。私はどんな問題でも走っていません。しかし、私のサービスでは、あなたの場合のように大きなPOST要求は実行されていません。 –

+8

これは必ずしも必要ではありません。そのように閉じてしまうと、そのような質問への回答が記入して提供することができる考慮事項と注意点の理解が深刻ではありません。選択された答えは素晴らしい例です。実際、提供されたすべての回答に関連する新しい考慮事項があります。 –

答えて

107

です。リバースプロキシはあなたを与えるために起こっているとして、前にnginxのを入れて、箱から出して

、:

  • アクセスログ
  • エラーログ
  • 簡単にSSLターミネーション
  • SPDYサポート
  • gzipのサポート
  • いくつかのルートでいくつかの行にHTTPヘッダーを簡単に設定する方法
  • 非常に高速の静的資産処理(S3 /などからサービスを提供している場合)。しかし、これは)それは関係ありません

ゴーHTTPサーバは非常に良いですが、あなた車輪の再発明する必要性は、これらの事のいくつかを(これは結構です行うになります。すべてであることを意味していませんみんなに)。

私は常に、それがうまくいけば、それは "Webサーバー"のことをすることができますnginxを前に置くことが簡単に見つかりました。 My Goアプリケーションはアプリケーションの処理を行いますが、最低限のヘッダーのみなどを処理します。それが必要なのです。 nginxを「悪い」ものとして前面に置かないでください。

+0

あなたの返信ありがとう! - 1)Go HTTPは何らかのログを生成しますか? 2)nginxは要求/応答のスループットをいくらか低下させますか? –

+3

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

+13

もう1つの大きな特徴:アプリをアップグレード/保守する方法(パケットがダウンしている間にパケットをドロップすることなく)はどうですか? Nginxは、パケットを失うことなく、あなたの周りのトラフィックを操縦させます。 – BraveNewCurrency

15

Goの標準httpサーバは正常です。あなたのアプリケーションがほとんど/単に "動的な"要求/応答であるなら、それは本当に最善の方法です。

静的資産を提供するためにnginxを使用することもできますが、標準のGo oneでもそれが可能です。より高いパフォーマンスが必要な場合は、ニス(たとえば)でできる限りCDNまたはキャッシュを使用してください。

同じIPアドレスから別のアプリケーションを提供する必要がある場合、nginxはプロキシが異なるアプリケーション間でリクエストを配信するうえで最適な選択肢です。私はしばしばそのようなことのためにツールボックスからVarnishまたはHAProxyを得るでしょう。

+0

はい、私は実際には動的データを提供するためにのみ使用しています。ですから、NGINXは必要ありません。返信ありがとう –

+0

Varnish/HAProxyは必須ではありませんが、Nginxにはキャッシングとロードバランシングのための同様のツールセットがあります。 – Anatoly

+0

@mikhailovは私が言ったことではありませんか? nginxはうまく動作します。個人的にはワニスやHAproxyを好むことがよくあります。私はそれらをより簡単に構成し、動作させることができます。 –

4

Gorilla web toolkitはあなたを与える:

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

Goのnet/httpとNGINXのようなHTTPサーバーとの間には大きなギャップがあります。

個人的には、代わりにCDNを接続できることがわかっている場合は、net/httpの上に別のHTTPサーバーをインストールして構成することは避けてください。

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

1

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

logHandler(gzipHandler(fileServer)) 

エラーログは本当に面白い方法で処理されます。ミドルウェアがエラーコード(int)を返す限り、エラー処理ミドルウェアは自動的にそれを処理します。彼らはNginxのようにGoのサイト全体を構成する限りでさえも行ってきました。 "すべてのGopher Academyウェブサイトのnginx.confファイルは115行以上で、同等のCaddyファイルは50行しかありません。

関連する問題