2011-02-10 16 views
4

私は、nginx + thinを実行しているサーバー上に複数のドメインを設定しようとしています。たとえば、www.domain1.comとwww.domain2.comのそれぞれのアプリへのルートパスが異なる別のアプリに移動したいとします。nginx、thin、および複数のホスト

nginxについてよく知っている方は、このポストの最後にnginx.confファイルを投稿しました。

私は複数のサーバブロックを試してみることができたと思っていましたが、 次に、サーバがデフォルトでランダムなシンポートを選択するという問題に直面し、両方のドメインが同じアプリケーションになりました。 *主な理由は、両方のアプリケーションのすべてのポートがthin_clusterブロックの内部にあることです。*

私の主な懸念は、特定のサーバーとの関連がないthin_clusterがあることです。そして、server_nameなどを持つサーバブロックがあります。しかし、thin_clusterはサーバブロック内にネストすることはできません。

複数のホストを提供する方法に関するアイデアはありますか?ここで

はあなたが好きなあなたはマッハ「サーバー」と「上流」のセクションとして記述することができる私の/etc/nginx/nginx.confファイル

user nginx; 
worker_processes 5; 

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

events { 
    worker_connections 1024; 
} 

http { 
    include  mime.types; 
    default_type application/octet-stream; 

    log_format main '$remote_addr - $remote_user [$time_local] $request ' 
         '"$status" $body_bytes_sent "$http_referer" ' 
         '"$http_user_agent" "$http_x_forwarded_for"'; 

    access_log /var/log/nginx.access.log main; 

    sendfile  on; 

    keepalive_timeout 65; 

    upstream thin_cluster { 
    server 0.0.0.0:3000; 
    server 0.0.0.0:3001; 
    server 0.0.0.0:3002; 
    server 0.0.0.0:3003; 
    server 0.0.0.0:3004; 
    } 

    server { 
    listen  80; 
    server_name www.domain1.com; 

    root /home/ec2-user/helloCloud/public; 

    location/{ 
     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 off; 

     if (-f $request_filename/index.html) { 
     rewrite (.*) $1/index.html break; 
     } 
     if (-f $request_filename.html) { 
     rewrite (.*) $1.html break; 
     } 
     if (!-f $request_filename) { 
     proxy_pass http://thin_cluster; 
     break; 
     } 
    } 

    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
     root html; 
    } 
    } 
} 

答えて

6

です。

 
upstream cluster1 { 
    ...; 
} 
upstream cluster2 { 
    ...; 
} 
server { 
    listen 80; 
    server_name www.domain1.com; 
    root /home/app1; 
    location/{ 
    try_files $uri/index.html $uri.html $uri @backend; 
    } 
    location @backend { 
     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 off; 
     proxy_pass http://cluster1; 
    } 
} 
server { 
    listen 80; 
    server_name www.domain2.com; 
    root /home/app2; 
    location/{ 
    try_files $uri/index.html $uri.html $uri @backend; 
    } 
    location @backend { 
     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 off; 
     proxy_pass http://cluster2; 
    } 
} 

これは一例です。

"偽の" ifブロックの代わりに、 "try_files"を使用しました。それについては、ドキュメントを読んでください。