2011-02-10 84 views
4

我想在運行nginx + thin的服務器上設置多個域。例如,我希望www.domain1.com和www.domain2.com使用不同根路徑的不同應用到各自的應用。nginx,瘦客戶端和多個主機

如果你對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; 
    } 
} 

這裏是一個例子。

我用「try_files」代替了「if」塊。只需在文檔中閱讀它。