リバースプロキシを使って1つのグローバルIPアドレスで複数のウェブサーバーへ振り分ける【UbuntuでNginxのリバースプロキシを設定する】
自宅で複数のウェブサーバーなどを運用するようになり、ウェブサーバーごとにドメインを設定したくなりました。
今まで公開したいウェブサーバーが1台だったので、ルーターのポートフォワードで運用していました。 ルーターのポートフォワード設定だと、WAN側のポートとLAN側のサーバーのIPアドレス・ポートを紐付けています。 そのため、ウェブサーバーで絶対的に使われる80番ポートが割当可能なサーバーは1台のみで、2台目以降はポートを変える必要があり、運用の観点で現実的ではありません。
そこで、アクセスされるホスト名でウェブサーバーへの振り分けを行う方法を探していたらリバースプロキシが最もメジャーな方法でした。
今回は、リバースプロキシの概要と、Ubuntu環境へのインストール・設定方法について説明します。
リバースプロキシとは
一般的に、クライアントがウェブサーバーへアクセスすると、ルータがウェブサーバへリクエストを直接振り分けてウェブサーバーがクライアントへ直接応答を返していました。。
リバースプロキシは、クライアントとウェブサーバの間に立って要求を代理で処理します。
この時、ウェブサーバはクライアントではなくリバースプロキシに応答を返し、リバースプロキシがクライアントに応答を返します。
間にリバースプロキシが挟まることによるメリットを以下に記載します。
リバースプロキシのメリット
簡単に言うと、アクセス速度が向上します。
リバースプロキシの代表格NginxやApache、Squidなどには、キャッシュが用いられています。 1度目のアクセスで、リバースプロキシサーバーからウェブサーバーへリクエストを発行し、結果をリバースプロキシサーバーにキャッシュします。 2度目以降のリクエストは、リバースプロキシサーバーのキャッシュを返すため、応答速度が向上します。
次章から、Nginxのインストールから、リバースプロキシの設定方法について説明します。
Nginxによるリバースプロキシ設定
環境
- OS: Ubuntu 16.04 Server Edition
- サーバー構成
- リバースプロキシサーバー(rproxy/192.168.1.10)
- ウェブサーバーA(serverA/192.168.1.100/a.com)
- ウェブサーバーB(serverB/192.168.1.200/b.com)
インストール手順
リバースプロキシサーバーにNginxをインストールします。
$ sudo apt-get install nginx
インストールされたnginxのバージョンを確認します。
$ nginx -v
nginx version: nginx/1.10.0 (Ubuntu)
リバースプロキシの設定
リバースプロキシサーバーにおいて、Nginxの設定ファイルを編集します。
ウェブサーバーAに振り分ける設定
リバースプロキシを設定します。
$ sudo vi /etc/nginx/sites-available/web_serverA
server {
server_name serverA.example.com; #クライアントがアクセスするURL
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
location / {
proxy_pass http://192.168.1.100; #ウェブサーバーAのIPアドレス(/etc/hostsに記載しているホスト名も可)
}
}
設定ファイルを有効化します。
$ sudo ln -s /etc/nginx/sites-available/web_serverA /etc/nginx/sites-enabled/
ウェブサーバーBに振り分ける設定
リバースプロキシを設定します。
$ sudo vi /etc/nginx/sites-available/web_serverB
server {
server_name serverB.example.com; #クライアントがアクセスするURL
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
location / {
proxy_pass http://192.168.1.200; #ウェブサーバーBのIPアドレス(/etc/hostsに記載しているホスト名も可)
}
}
$ sudo ln -s /etc/nginx/sites-available/web_serverB /etc/nginx/sites-enabled/
設定の反映
以下のコマンドで設定を反映します。
$ sudo systemctl reload nginx
エラーがでた場合は、設定ファイルを見直して、再度上記コマンドを実行してください。
アクセス確認
server_nameに設定したアドレスにアクセスして、それぞれのウェブサーバーのページが表示されていれば、正しく設定されています。
まとめ
Nginxによるリバースプロキシ設定手順について説明しました。 リバースプロキシを使えば、1つのグローバルIPアドレスで、複数サーバーへの振り分けが実現可能です。