[図解] nginxをざっくり理解する | りゅーそうブログ
りゅーそうブログのロゴ

Ryusou.dev

[図解] nginxをざっくり理解する

nginx

nodejs

2020/04/13

2022/01/23

nginxはご存知ですか?
nginx(エンジンエックス)はWebサーバー・ロードパランサ・リバースプロシキなど様々な用途で用いられているソフトウェアです。
同じようなツールとして、Apacheなどがあります。

私自身、Webアプリを作成していく中で、サーバーを構築するとなった際に実際にどのようにnginxを使用していけば良いのか?ということを理解するのに大変苦労しました。
そもそも、昨今のNode.jsやGoといったサーバーサイド言語にはWebサーバーを立ち上げる機能が備わっています。
なぜ、nginxのようなツールが必要なのでしょうか?

他のソフトウェアとの比較は他の記事に譲ることにして、当記事ではそもそもnginxとはなんなのか?どのように使用すればいいのかの概要を解説していきます。

なお、私自身サーバーサイドの言語としてNode.jsを用いることが多いので、ユースケースはそれにそったような解説になります。だだし、特定の言語にそったような解説はしませんので、どの言語を使用している方でもお読みいただけます。

nginxとは?


先ほど、述べたとおりnginxはWebサーバー・ロードパランサ・リバースプロシキなど様々な用途で用いられているソフトウェアです。

これだけでは少しわかりづらいので、以下の図をご覧ください。

nginxの構造の説明図。ロードパランサーの説明


図のように、アプリケーションをネット上で動かすためにはサーバーが必要です。アプリケーションはサーバーの上で動きます。
nginxはもちろんこのサーバーを構築する機能を持っています。

それに加えてnginxが優れているのは、ロードパランサとしての機能です。
図のようにユーザーがアプリケーションにアクセスする際に、直接Webサーバーにアクセスしないように構築されたサーバーのことをリバースプロキシと呼びます。図のようにアクセスをいくつかのサーバーに分散することで、サーバーが落ちるのを避けたり、パフォーマンスを向上させます。上の図のようにサーバーに分散して転送するリバースプロシキのことを特にロードパランサと呼びます。

nginxにおいては、Webサーバーというよりかは、このようなリバースプロキシ、ロードパランサの機能を利用するケースも多いです。
例えばAWSのEC2などを利用してサーバーを立て、そのリバースプロキシとしてnginxを利用する。といったユースケースが考えられます。
今回はこのようなユースケースにおけるnginxの設定について深掘りをしていこうと思います。

リバースプロキシ/ロードパランサってあると何が嬉しいの?


nginxにリバースプロキシのような機能に優れているということがわかりました。では、そもそもリバースプロキシがあるとどのようなメリットがあるのでしょうか?

1. サーバーへの負荷の低減・分散

先ほども述べましたが、リバースプロキシとはクライアントから受け取ったデータなどを受け取り、Webサーバーに転送するためのサーバーです。
nginxにはこのデータをいくつかのサーバーに分散するロードパランサという役割があります。これによってサーバーの負荷の低減を行います。

2.HTTPS対応

昨今では、SEOや安全性の観点からHTTPS対応は必須となっています。
HTTPS対応などを行う際にはSSL/TLSなどの通信を行う必要があります。その際にも、サーバー間でデータの送受信は行われるので、これがパフォーマンスに大きな影響を与えます。
nginxで作成したリバースプロキシにHTTPS対応の処理を分散することによって負荷の分散を行い、パフォーマンスを向上させます。また、調査も容易になります。
また、HTTPによるアクセスをHTTPSに変換することも可能です。

3. キャッシュとバッファの設定

キャッシュとは一度アクセスしたサイトのデータを一時的に保存し、同じページにアクセスした際の表示を早くする仕組みです。nginxではこのキャッシュに保存するデータ量や時間などを設定し、最適化することができます。
バッファとは、データ転送の効率を上げるためにデータをまとめておくためのメモリやディスクの領域のことです。バックエンドから受け取ったデータをバッファにためておくことをバッファリングと言いますが、このバッファリングをするかどうかやバッファのサイズなどを指定することができます。
(ただ、私はキャッシュ、バッファの最適化の知識がないので、基本的な設定方法の話にとどめます。詳しい方ご教授ください。。。)

このように、nginxのリバースプロキシの機能を用いることで、アプリケーションの性能が向上されるのはもちろん、様々な設定をnginxに分離することによって役割を分散することができます。
これによって、アプリケーションのスケールアップや改善をしやすい設計を行うことができます。

詳しい設定方法は次回に続く。

参考


「キャッシュとはなんですか? GMOベポパ」