У меня есть это требование, когда есть несколько приложений рельсов. Каждое приложение развернуто на двух серверах приложений (app1 и app2), и они распределены по нагрузке через nginx на отдельном сервере (lb).
Коробка lb содержит простой ванильный nginx без плагинов для пассажиров.
Приложения рельсов развернуты на пассажирском стенде в одиночку.
Все приложения rails должны работать в одном домене, но с разными sub_uri, как показано ниже
http://www.example.com/rails1
http://www.example.com/rails2
У меня есть конфигурация lb box nginx, как показано ниже.
http {
...
upstream rails1_cluster {
ip_hash;
server app1.server:3001;
server app2.server:3001;
}
upstream rails2_cluster {
ip_hash;
server app1.server:3002;
server app2.server:3002;
}
...
server {
server_name www.example.com;
...
...
location /rails1 {
proxy_pass http://rails1_cluster;
...
}
location /rails2 {
proxy_pass http://rails2_cluster;
...
}
....
}
}
При такой настройке приложение, работающее в автономном режиме пассажира в приложениях app1 и app2, выдает ошибку, что оно не может найти какой-либо маршрут /rails1/.
Эта статья «Как развернуть Phusion Passenger в подкаталог, маршрутизация ошибок и перезапуск» пытается решить ту же проблему, но предлагает изменить маршруты, чего я не хочу делать. Приложения Rails имеют ту же кодовую базу, но настроены для конкретных случаев, обслуживающих конкретного клиента.
В пассажирском плагине для сервера Nginx есть passenger_base_uri, который помогает в настройке вспомогательного URI для приложения. Что эквивалентно тому же в случае одинокой пассажирской стоянки? Или я что-то упустил здесь? Любая помощь, предложения помогут.