Как создать несколько локаций с Nginx, Passenger, Sinatra - PullRequest
4 голосов
/ 31 марта 2012

У меня есть раздел сервера, который выглядит следующим образом:

server {
    listen       80;
    server_name  arch;
    root   /data/apps/production/fentonGem2/current/public;
    passenger_enabled on;
}

, который работает нормально. Однако я хотел бы развернуть два или более приложений на одном и том же порту server_name и listen. Вероятно, я бы использовал что-то вроде следующего:

server {
    listen       80;
    server_name  arch;
    location /app1 {
         root   /data/apps/production/fentonGem2/current/public;
         passenger_enabled on;
    }
    location /app2 {
         root   /data/apps/production/fentonGem3/current/public;
         passenger_enabled on
    }
} 

Но это не работает. Кто-нибудь знает, как я могу развернуть два отдельных приложения и связаться с ними по:

http://domain.com/app1/

и

http://domain.com/app2/

В установке используются Nginx, Phusion Passenger, Rack и Sinatra.


UPDATE:

Спасибо за ответы, но я нашел их, и подход не помог, хотя, возможно, я не очень хорошо понимаю. Похоже, мне нужно развернуть одно приложение внутри другого, что кажется очень нечистым. В конце концов я прибегнул к отдельным разделам server, а затем обновил файл /etc/hosts, чтобы иметь псевдонимы серверов для того же IP-адреса. Итак, теперь у меня есть:

http://app1/

и

http://app2/

и разделы сервера, которые выглядят так:

server {
    listen       80;
    server_name  app1;
    root /data/apps/production/app1/current/public;        
    passenger_enabled on;        
}               
server {
    listen 80;
    server_name app2;
    root /data/apps/production/app2/current/public;
    passenger_enabled on;
}

и в / etc / hosts:

192.168.1.30     app1 app2

Ответы [ 2 ]

1 голос
/ 05 апреля 2012

Сработало следующее:

  1. Впервые созданы символические ссылки с именами app1 и app2, указывающие на «публичный» каталог следующим образом:

    ln -s /data/apps/production/fentonGem2/current/public /data/apps/production/fentonGem2/current/app1
    ln -s /data/apps/production/fentonGem2/current/public /data/apps/production/fentonGem2/current/app2
    
  2. Измените nginx.conf так, чтобы он имел rails_base_uri, который должен выглядеть примерно так:

    ...
    server {
        listen       80;
        server_name  arch;
        location ^~ /app1 {
            root /data/apps/production/fentonGem2/current;
            rails_env production;
            passenger_enabled on;
            passenger_base_uri /app1;
        }
        location ^~ /app2 {
            root /data/apps/production/fentonGem2/current;
            rails_env production;
            passenger_enabled on;
            passenger_base_uri /app2;
        }
    } 
    ...
    

Надеюсь, это поможет.

1 голос
/ 31 марта 2012

Не уверен, но вам может понадобиться passenger_base_uri /app1;

Подробнее о Passenger и Nginx conf: http://www.modrails.com/documentation/Users%20guide%20Nginx.html#PassengerBaseURI

РЕДАКТИРОВАТЬ:

"Разрешеночтобы указать эту опцию несколько раз. Сделайте это, чтобы развернуть несколько приложений в разных под-URI на одном виртуальном хосте. "

...