Несколько стоечных приложений на nginx + passenger, одно от имени root, другое нет ... config help - PullRequest
2 голосов
/ 23 февраля 2010

Итак, у меня есть два приложения, которые я хочу запустить на сервере. Одно приложение, которое я хотел бы использовать как приложение по умолчанию, то есть все URL-адреса должны отправляться этому приложению по умолчанию, , за исключением для определенного пути, давайте назовем его /foo:

http://mydomain.com/        -> app1
http://mydomain.com/apples  -> app1
http://mydomain.com/foo     -> app2

Мои два стоечных приложения установлены следующим образом:

/var
  /www
    /apps
      /app1
        app.rb
        config.ru
        /public
      /app2
        app.rb
        config.ru
        /public
    app1 -> apps/app1/public
    app2 -> apps/app2/public

(app1 и app2 - символические ссылки на публичные каталоги соответствующих приложений). Это настройка Пассажира для подчиненных URI, описанных здесь: http://www.modrails.com/documentation/Users%20guide%20Nginx.html#deploying_rack_to_sub_uri

Со следующим конфигом у меня /foo собирается в app2:

server {
  listen 80;
  server_name mydomain.com;
  root /var/www;
  passenger_enabled on;
  passenger_base_uri /app1;
  passenger_base_uri /app2;

  location /foo {              
    rewrite ^.*$ /app2 last;
  }
}

Теперь, как мне заставить app1 забрать все остальное? Я пробовал следующее (помещено после директивы location /foo), но я получаю 500 с бесконечным внутренним перенаправлением:

location / {
  rewrite ^(.*)$ /app1$1 last;
}

Я надеялся, что директива last предотвратит это бесконечное перенаправление, но, думаю, нет. Мой /foo переписать все еще работает. И я все еще могу перейти к http://mydomain.com/app1.

Есть идеи? Спасибо!

1 Ответ

1 голос
/ 02 августа 2011

Один из способов - создать новый файл config.ru, который отправит запрос в правильное приложение.

# /var/www/apps/config.ru
require './app1/app1'
require './app2/app2'

map ('/') { run App1 }
map ('/foo') { run App2 }

Конечно, это означает, что ваши приложения должны быть выполнены таким образом, чтобы они могли жить в одном пространстве выполнения.

...