このブログを検索

2014/11/24

nginxでリバースプロキシ設定

さくらのvpsを2台借りた。

1台目はcentosでapacheが動いている。

2台目をリバースプロキシにして、今まで1台目にアクセスするときに使用していたURLに
クライアントがアクセスすると、2台目がリクエストを1台目に転送するようにする。

別にそうする必要性はなにもないのだが、ちょっとやってみたかっただけ。



まず、DNSに登録している既存のAレコードを、新しいサーバのIPアドレスに変更する。

<今まで>
www.example.com    123.xx.xx.100

<変更後>
www.example.com    123.xx.xx.200 ※2台目
www2.example.com   123.xx.xx.100 ※1台目



2台目はubuntuをインストールし、httpdはnginxにする。

これも必要性は別になく、違うものを使ってみたかっただけ。



ubuntuをインストールしたばかりなので、

sudo apt-get update

をする。

sudo apt-get upgrade

もする。

これらの必要性もいまいちよくわからないが、一応やっておく。


nginxをインストールする。

sudo apt-get install nginx


firewallを設定する。

sudo ufw allow http



クライアントから www.example.com にアクセスしてみる。

nginxのテストページが表示される。



リバースプロキシの設定の仕方は、検索するとたくさん出てくるが、
設定をどこに書くかが人によって違う。

いろいろ試したが、/etc/nginx/nginx.conf に書いたら動いた。

sudo vi /etc/nginx/nginx.conf


http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
    ...............
}


"http"のところに、下記の内容を追加する。


## reverse proxy
        server {
                server_name     www.example.com;
                location / {
                        proxy_pass http://123.xx.xx.100; ※転送先のWEBサーバのIPアドレス
                }
        }



これでとりあえず、動く。

ほかにもいろいろ設定したほうがよいところなどがあるようだが、
とりあえず下記の2行を追加した。


## reverse proxy
        server {
                server_name     www.example.com;
                location / {
                        proxy_pass http://123.xx.xx.100;
                }
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ※1
                proxy_set_header X-Forwarded-Host $host; ※2
        }
}


これらがないと、転送先のサーバのアクセスログで、アクセス元が全部リバースプロキシになってしまう。


私のWEBサイトには、アクセス者のIPアドレスとホスト名を表示するページがあるのだが、
そこが全部リバースプロキシサーバのIPアドレスとホスト名になってしまう。


※1だけいれれば変わると思ったが、変わらず、
※2をいれてようやく変わった。

※2だけでいいのかと試したらダメで、どうも両方必要なようだ。


nginxの設定を確認したいときは 
$ sudo /etc/nginx$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

サービスの再起動
$ sudo service nginx restart