Несколько стоечных приложений на nginx + passenger, одно от имени root, другое нет...config
Итак, у меня есть два приложения, которые я хочу запустить на сервере. Одно приложение, которое я хотел бы использовать в качестве приложения "по умолчанию", то есть все 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
Со следующим конфигом у меня есть /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 с бесконечным внутренним перенаправлением в error.log
:
location / {
rewrite ^(.*)$ /app1$1 last;
}
Я надеялся, что last
директива предотвратит это бесконечное перенаправление, но я думаю, что нет. /foo
получает ту же ошибку.
Есть идеи? Спасибо!
5 ответов
Мне удалось заставить следующее работать. Для вашего примера, то, что вы хотите для структуры каталогов и символических ссылок, это.
/var
/www
/apps
/app1
app.rb
config.ru
/public
/foo -> /var/www/apps/app2/public
/app2
app.rb
config.ru
/public
Ваш серверный блок nginx будет выглядеть так:
server {
listen 80;
server_name mydomain.com;
root /var/www/apps/app1/public;
passenger_enabled on;
passenger_base_uri /foo;
}
Приветствия, Майк Д.
Как вам удалось решить это с nginX. Я пробовал это, чем я пытался с пассажиром. Не повезло с обеих сторон.
Вместо этого, изменив nginx, вы можете сделать это в MMVC(Multi MVC) в самой Sinatra, используя стойку.
run Rack::Cascade.new [ IndexApp, BlogApp, TestApp, ThisApp, ThatApp]
Используя это, вы можете запускать несколько приложений, используя nginx passenger. Поскольку пассажиру нужна общая папка, я создал фиктивную общую папку, а в публичной папке я создал папки для управления отдельными активами, такими как public / blog / public / index public / test и т.д.
У меня была похожая проблема. Я нашел способ вставить следующее в раздел server файла nginx.conf (хотя это немного похоже на хак, это работает):
error_page 403 / app1 / homepage;
надеюсь это поможет
Вам, вероятно, следует использовать субдомены, если приложения не связаны между собой.
server {
listen 80;
server_name app1.mydomain.com;
root /var/www/apps/app1;
passenger_enabled on;
passenger_base_uri /app1;
}
Если субдомены не являются опцией, возможно, будет полезна директива alias.