動かざることバグの如し

近づきたいよ 君の理想に

Nginxのリバースプロキシ機能を使って唯一のグローバルIPを有効活用する

今までNAPT機能で複数サーバーの振り分けやってたけどそろそろ限界なのでリバースプロキシを使ってみる

今まで

     インターネット port80は192.168.1.181へ                                   
           +        port81は192.168.1.182へ                                   
           |        port82は192.168.1.183へ                                   
   +-------+------+                  +------------------+                     
   |WZR-HP-G300NH2|                  |          ホスト1|                     
   | 192.168.1.1  |      +-----------+     192.168.1.181|                     
   +-------+------+      |           |server1.nyaaz.info|                     
           |             |           +------------------+                     
   +-------+------+      |           +------------------+                     
   |     KVM      |      |           |          ホスト2|                     
   |192.168.1.180 +------+-----------+     192.168.1.182|                     
   |              |      |           |server2.nyaaz.info|                     
   +--------------+      |           +------------------+                     
                         |           +------------------+                     
                         |           |          ホスト3|                     
                         +-----------+     192.168.1.183|                     
                                     |server3.nyaaz.info|                     
                                     +------------------+

KVM(Proxmox)で仮想マシンを動かし、その中で3つのゲストを作成してそれぞれに192.168.1.181..3を割り当て

ルーターのNAPTを利用してserver1.nyaaz.info:80は192.168.1.181へ、server2.nyaaz.info:81は192.168.1.182へ飛ばすようにする。

構成はシンプルだけど一番致命的なのはポート80を1つのサーバーが占領してしまう点が最大の問題

リバースプロキシを使った場合

   インターネット                                                             
         +                                                                    
         |      Poet80は192.168.1.185へ                                     
 +-------+------+                               +------------------+          
 |WZR-HP-G300NH2|                               |          ホスト1|          
 | 192.168.1.1  |                        +------+     192.168.1.181|          
 +-------+------+                        |      |server1.nyaaz.info|          
         |                               |      +------------------+          
 +-------+------+   +-------------+      |      +------------------+          
 |     KVM      |   |    Nginx    |      |      |          ホスト2|          
 |192.168.1.180 +---+192.168.1.185+-------------+     192.168.1.182|          
 |              |   |             |      |      |server2.nyaaz.info|          
 +--------------+   +-------------+      |      +------------------+          
                                         |      +------------------+          
   server1.nyaaz.infoなら192.168.1.181   |      |          ホスト3|          
   server2.nyaaz.infoなら192.168.1.182   +------+     192.168.1.183|          
   server3.nyaaz.infoなら192.168.1.183          |server3.nyaaz.info|          
                                                +------------------+  

リバースプロキシとしてNginxを利用する(現在1.2.1利用)ルーターの設定を変え、ポート80番のアクセスをすべて192.168.1.185へ送る。NginxはアクセスされたドメインごとにIPを振り分ける

手順

子サーバー1~3はすでに導入済みだとする。あくまでリバースプロキシの部分だけ

nginxのインストール

割愛するからここ見る

設定

/etc/nginx/sites-available/defaultに以下のように

server {
    listen 80;
    server_name server1.nyaaz.info;
    location / {
        proxy_pass http://192.168.1.181;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $http_host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_max_temp_file_size 0;
        #proxy_redirect default;# for SSL?
        #for Websocket
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
server {
    listen 80;
    server_name server2.nyaaz.info;
    location / {
        proxy_pass http://192.168.1.182;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $http_host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_max_temp_file_size 0;
        #proxy_redirect default;# for SSL?
        #for Websocket
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
server {
    listen 80;
    server_name server3.nyaaz.info;
    location / {
        proxy_pass http://192.168.1.183;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $http_host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_max_temp_file_size 0;
        #proxy_redirect default;# for SSL?
        #for Websocket
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

確認済みなこと