2011-02-10 143 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”块。只需在文档中阅读它。