nginxとリバースプロキシ

こんばんは。subaruです。最近めっきり寒くなりましたね。最近僕は、羽毛ぶとんを手に入れ毎日ぬくぬくで快眠することができてます。さてさて、今日は先週、お預けになったnginxのリバースプロキシサーバとしての役割とかを実例を交えつつ、まとめてみようと思います。

前回の記事はこちら
セキュリティにも?nginxとWEBサーバーの基本をまとめてみた。

 

 

前回までのまとめ

nginxとは…

  • WEBサーバー
  • リバースプロキシサーバー
  • メールプロキシサーバー

としての用途で利用ができる。ということを、前回の記事でまとめました!

 

リバースプロキシって何だろう

 

フォワードプロキシ、つまり一般的なプロキシサーバではクライアントの代わりにサーバとのやり取りをプロキシサーバが行います。

 

\"スライド1\"

図にするとこんな感じですね。パワポで10秒で作ってみました。

 

それに対して、リバースプロキシサーバではサーバの代わりに、クライアントとのやり取りをプロキシサーバが代行するものです。リバースプロキシって一言で言っても様々な用途で使われてまして、

  • コンテンツキャッシュ
  • ロードバランス
  • SSLアクセラレーション

という言葉でなら聞いたことがあるのでは。これらは、役割は異なりますがそれぞれの原理は同じものですね。

\"プレゼンテーション1\"

 

こっちも図にしてみました。(これもパワポで5秒で作りました。)
矢印の向きが、違いますよね。
少しはイメージがつかめましたでしょうか?

ロードバランス

なんの話でしたっけ?あ、nginxですね。
nginxはWEBサーバとしても使うことができるのですが、リバースプロキシサーバの役割を持つことができます。

その中でも、WEBサーバの負担分散用途としてのロードバランスが用いられていることが多いようです。

この、リバースプロキシを用いたロードバランス機能は、インターネット配下にWebサーバを直に置かず、リバースプロキシサーバを間に挟むことによって外部からWebサーバへの直接アクセスを防ぐことができるので、間接的にセキュリティが向上します。

負担分散もできる上に、セキュリティも向上し、レスポンスが早くなるなんて素晴らしいじゃないですか!

んじゃ、実際にやってみよう!

それじゃあ、ここからは実際に仮想環境にnginxを作って、このロードバランス機能について検証してみましょう!

環境
* CentOS 7.1
* nginx

OS構築

構築にはVagrantを使います。Vagrantってのは、簡単にコマンド一発で仮想環境を構築できる超便利ツールです。今回は、本題ではないので詳しくは説明しません!またの機会に。

「vagrant インストール」あたりでググると、紹介しているブログが多々ヒットするのでそちらを参照してみてください。

インストール後、

$ vagrant box add centos https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.1/vagrant-centos-7.1.box
> $ vagrant init
> $ vagrant up

たった、これだけでCentOS7.1の環境ができるんです!めっちゃ便利。

nginxのインストール

$ yum –enablerepo=epel -y install nginx
$ systemctl start nginx
$ systemctl enable nginx.service

はい、これでnginxの環境が整いました。ここまでたった6手です。めちゃんこ早い!

nginxの設定ファイル

さて、ここまできたら実際にnginxの設定ファイルをいじってみましょう。
/etc/nginx/nginx.conf に設定ファイルがありますね。

events {
worker_connections 1024;
}

http {
log_format main \’$remote_addr – $remote_user [$time_local] \”$request\” \’
\’$status $body_bytes_sent \”$http_referer\” \’
\’\”$http_user_agent\” \”$http_x_forwarded_for\”\’;

access_log /var/log/nginx/access.log main;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;

include /etc/nginx/mime.types;
default_type application/octet-stream;

# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;

server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

location / {
}

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}

なんか意外にシンプルな感じで好感が持てます。シンプルイズベストですね。
さあ、この設定ファイルに http{}の中にWebサーバを「backend」という名前で定義すると、勝手に80番ポートでlistenしてくれるようになります。

http {
upstream backend {
server 192.168.1.1:80;
server 192.168.1.2:80;
server 192.168.1.3:80;
}

server {
listen 0.0.0.0:80;
server_name www.exemple.com;
location / {
proxy_pass http://backend;
}
}
}

というように設定すると死活監視の設定を行わなくてもWebサーバが落ちてる場合は自動的に振り分け先から除外されます。

ということで、Webサーバとしてもフォワードプロキシサーバとしても注目されているnginxを是非とも導入してみてはいかがでしょうか?

  • このエントリーをはてなブックマークに追加
  • Pocket