Я хотел бы запустить несколько приложений rails, просто используя разные блоки местоположения. Запускаются и настраиваются разные воркеры-единороги, работают нормально.
Все приложения находятся в одной папке: /var/www/<app>
, поэтому я настроил nginx так:
root /var/www;
location /app1/ {
root /var/www/app1/public;
try_files $uri/index.html $uri.html $uri @app1;
}
location /app2/ {
root /var/www/app2/public;
try_files $uri/index.html $uri.html $uri @app2;
}
Моя проблема в том, что с этим набором правил запрос (например, mydomain / app1 / check) поступает в мое приложение1 следующим образом: Started GET "/app1/check" for ...
Я бы хотел просто Started GET "/check" for ...
Что мне следует изменить в моей конфигурации?
Как вы настроили свой путь к активам в этом случае?
Мой путь к активам
<host>/assets/<asset_name>.css
но правильный путь:
<host>/<app_name>/assets/<asset_name>.css
Моя конфигурация в основном такая же, как и выше.
upstream app1 {
# Path to Unicorn SOCK file, as defined previously
server unix:/tmp/unicorn.app1.sock fail_timeout=0;
}
upstream app2 {
# Path to Unicorn SOCK file, as defined previously
server unix:/tmp/unicorn.app2.sock fail_timeout=0;
}
location /app1/ {
root /home/<user_app1>/<app1>;
rewrite ^/app1/(.*)$ /$1 break;
try_files $uri @app1;
}
location /app2/ {
root /home/<user_app2>/<app2>;
rewrite ^/app2/(.*)$ /$1 break;
try_files $uri @app2;
}
location @app1 {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app1;
}
location @app2 {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app2;
}
Если вы не хотите изменять параметры восходящего потока (что бы вы ни делали в своем @app
локаций), простой rewrite
могу помочь тебе:
location /app1/ {
root /var/www/app1/public;
rewrite ^/app1/(.*)$ /$1 break;
try_files /app1/$uri/index.html /app1/$uri.html /app1/$uri @app1;
}
В break
параметр для rewrite
заставит nginx перезаписать URI без фактического перенаправления или перенаправления запроса.
Не забудьте добавить префикс /app1/
на ваш try_files
имена, потому что $uri
уже будет переписан в то время try_files
бежит.
Я делаю это с помощью nginx, uwsgi и django / wsgi - ключ:
location ~* /tiny/(.+?)/ {
include uwsgi_params;
uwsgi_pass unix:/run/uwsgi/tiny_$1.sock;
uwsgi_param SCRIPT_NAME /tiny/$1;
uwsgi_modifier1 30;
}
Я размещаю приложения как «имена»; то есть / tiny / foobar /, но приложение видит путь как / foobar / из-за изменения SCRIPT_NAME выше. modifier1 специфичен для WSGI (IIRC), поэтому может не относиться к вашей настройке.