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