Nginxでリバースプロキシ

2つのRailsアプリにリバースプロキシを使ってそれぞれ振り分ける例。

ディレクトリベースで振り分ける例

user              nginx;
worker_processes  4;

error_log         /var/log/nginx/error.log;

pid               /var/run/nginx.pid;

events {
  worker_connections  1024;
}

http {

  # Railsアプリの静的コンテンツはmongrel_clusterだと遅いのでもっと高速なサーバで
  upstream static {
    server 192.168.0.12:80;
    server 192.168.0.13:80;
  }

  # Railsアプリ mongrel_cluster
  upstream app1 {
    server 192.168.0.12:3000;
    server 192.168.0.12:3001;
    server 192.168.0.13:3000;
    server 192.168.0.13:3001;
  }
  upstream app2 {
    server 192.168.0.12:3010;
    server 192.168.0.12:3011;
    server 192.168.0.13:3010;
    server 192.168.0.13:3011;
  }

  # 静的ページかCGIだけ apache
  upstream web {
    server 192.168.0.8:80;
  }

  server {
    listen      80;
    server_name .taslam-example.jp;

    proxy_set_header  X-Real-IP       $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  Host            $http_host;
    proxy_redirect    false;
    proxy_max_temp_file_size          0;

    # 静的コンテンツ
    location ~ ^/(app1|app2)/(javascripts|stylesheets|images)/.* {
      proxy_pass http://static;
      break;
    }

    # アプリケーション1に振り分け
    location /app1 {
      proxy_pass http://app1;
      break;
    }

    # アプリケーション2に振り分け
    location /app2 {
      proxy_pass http://app2;
      break;
    }

    # 上に当てはまらないものはwebサーバに振り分け
    location / {
      proxy_pass http://web;
      break;
    }
  }

}

ドメインベースで振り分ける例

user              nginx;
worker_processes  4;

error_log         /var/log/nginx/error.log;

pid               /var/run/nginx.pid;

events {
  worker_connections  1024;
}

http {

  # Railsアプリの静的コンテンツはmongrel_clusterだと遅いのでもっと高速なサーバで
  upstream static {
    server 192.168.0.12:80;
    server 192.168.0.13:80;
  }

  # Railsアプリ mongrel_cluster
  upstream app1 {
    server 192.168.0.12:3000;
    server 192.168.0.12:3001;
    server 192.168.0.13:3000;
    server 192.168.0.13:3001;
  }
  upstream app2 {
    server 192.168.0.12:3010;
    server 192.168.0.12:3011;
    server 192.168.0.13:3010;
    server 192.168.0.13:3011;
  }

  # 静的ページかCGIだけ apache
  upstream web {
    server 192.168.0.8:80;
  }

  # アプリケーション1に振り分け
  server {
    listen      80;
    server_name app1.taslam-example.jp;

    proxy_set_header  X-Real-IP       $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  Host            $http_host;
    proxy_redirect    false;
    proxy_max_temp_file_size          0;

    # 静的コンテンツ
    location ~ ^/(javascripts|stylesheets|images)/.* {
      proxy_pass http://static;
      break;
    }

    location / {
      proxy_pass http://app1;
      break;
    }
  }

  # アプリケーション2に振り分け
  server {
    listen      80;
    server_name app2.taslam-example.jp;

    proxy_set_header  X-Real-IP       $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  Host            $http_host;
    proxy_redirect    false;
    proxy_max_temp_file_size          0;

    # 静的コンテンツ
    location ~ ^/(javascripts|stylesheets|images)/.* {
      proxy_pass http://static;
      break;
    }

    location / {
      proxy_pass http://app2;
      break;
    }
  }

  # Webサーバに振り分け
  server {
    listen      80;
    server_name www.taslam-example.jp;

    proxy_set_header  X-Real-IP       $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  Host            $http_host;
    proxy_redirect    false;
    proxy_max_temp_file_size          0;

    location / {
      proxy_pass http://web;
      break;
    }
  }
}