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; } } }