多くのユーザーがいるJSONデータを返すWebサービスをいくつか書いています。
go httpサーバーを使用する場合と比較して、サーバーの前でNginxを使用する利点は何ですか?
多くのユーザーがいるJSONデータを返すWebサービスをいくつか書いています。
go httpサーバーを使用する場合と比較して、サーバーの前でNginxを使用する利点は何ですか?
回答:
場合によります。
箱から出して、リバースプロキシとしてnginxを前に置くと、次のようになります。
Go HTTPサーバーは非常に優れていますが、これらのいくつかのことを行うには、車輪の再発明が必要になります(これは問題ありません。すべての人にすべてを提供することを意図しているわけではありません)。
私はいつも、nginxを前に置いて(それが得意なことです)、「Webサーバー」の処理を実行させる方が簡単だと思っています。My Goアプリケーションは、アプリケーションの処理を実行し、最小限のヘッダーなどのみを実行します。それがする必要があること。nginxを「悪い」ものとして前に置くことを考えないでください。
log
パッケージを使用します)。IPアドレス、リソースアクセスなどをログに記録する場合は、それを書き込む必要があります。基本を超えて、ヘッダーの設定についても同じことが言えます。具体的なデータはありませんが、Goの前にあるnginxは実際にはGoより遅くないはずです。実際、gzipと独自の最適化のおかげで速くなる可能性があります。「コスト」はより多くのメモリ/ CPU使用率になりますが、nginxはその面でも非常に効率的です。
Goの標準のhttpサーバーで問題ありません。アプリケーションがほとんど/のみ「動的」な要求/応答である場合、それは本当に最良の方法です。
nginxを使用して静的アセットを提供することもできますが、おそらく標準のGoのものでも問題ありません。より高いパフォーマンスが必要な場合は、Varnishで可能な限りCDNまたはキャッシュを使用する必要があります(たとえば)。
同じIPアドレスから異なるアプリケーションにサービスを提供する必要がある場合、プロキシが異なるアプリケーション間でリクエストを分散するには、nginxが最適です。ただし、そのような場合は、ツールボックスからVarnishまたはHAProxyを取得することがよくあります。
ゴリラのWebツールキットはあなたを与えます:
schema
パッケージはフォーム値を構造体に変換します。これは、Gonet/http
とNGINXのようなHTTPサーバーの間の多くのギャップを埋めます。
個人的には、net/http
代わりにCDNをプラグインできることがわかっている場合は、その上に別のHTTPサーバーをインストールして構成することは避けたいと思います。
net/http
標準ライブラリの中で最も強力なHTTPサーバーがあると思います。
https://blog.gopheracademy.com/caddy-a-look-inside/から、Goはミドルウェアを使用してgzip、エラー、静的ファイル、ルーティング、およびhttpヘッダーを処理できるようです。以下のブログの行は、そのような要求をどのように処理するかを示しています。
logHandler(gzipHandler(fileServer))
彼らは本当に興味深い方法でエラーロギングを処理します。ミドルウェアがエラーコード(int)を返す限り、エラー処理ミドルウェアは自動的にそれを処理します。彼らは、NginxのようにGoでサイト全体を構成するところまで行っています。「すべてのGopherAcademyWebサイトのnginx.confファイルの長さは115行を超えていました。同等のCaddyfileはわずか50行です。」