Назад | Перейти на главную страницу

Запуск нескольких приложений Rails под разными суб-URI для одного домена с помощью nginx

Мне удалось успешно настроить nginx и пассажирский фьюжн. Теперь у меня следующая конфигурация

server {listen 80  server_name **sub1.example.com** root /home/user/app1/public }    
server {listen 80  server_name **sub2.example.com** root /home/user/app2/public }

Теперь я хочу изменить его на следующую конфигурацию

server {listen 80  server_name **dev.example.com/example1** root /home/user/app1/public }
server {listen 80  server_name **dev.example.com/example2** root /home/user/app2/public }

Я попытался использовать директиву местоположения, но безуспешно. Я даже не уверен, возможно ли это. Любая помощь будет принята с благодарностью. Спасибо.

Ниже приведены мои настройки nginx.conf

server {
   listen 80;
   server_name dev.example.com;

location = /app1/ {
   root /home/rails/app1/public/; 

   passenger_enabled on;
   rails_env development;
}
location /app2/ {
   root /home/rails/app2/public/; 
   passenger_enabled on;
   rails_env development;
}
}

Это возможно с помощью Passenger Phusion's passenger_base_uri директива. Предположим, мой домен www.example.com

Теперь я хочу запустить несколько приложений rails для следующего URI

www.example.com - Загрузить приложение Rails1

www.example.com/app2 - Загрузить приложение Rails 2

Вот как будет выглядеть мой серверный блок в nginx.conf:

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

Посмотрите, как корень указывает на общую папку app1. И посмотрите на passenger_base_uri директива.

Теперь нам нужно выполнить последний шаг - общедоступную папку symlink app2 на /var/www/app1/public/app2, это делается с помощью следующей команды:

ln -s /var/www/app2/public /var/www/app1/public/app2

После создания этой ссылки перезапустите nginx, и вы будете готовы обслуживать разные приложения Rails в одном домене.

Ссылки: Развертывание Passenger Phusion на подчиненный URI

Предыдущий ответ:

 server_name dev.example.com/example1 

неправильно. Насколько я понимаю, вы хотели, чтобы dev.example.com перешел на dev.example.com/example1. В таком случае вам необходимо перезаписать URL-адрес, как показано ниже.

location = / { rewrite ^ http://dev.example.com/example1 ; }

Ответ после комментария:

Из вашего комментария я понял, что вы хотите обслуживать несколько приложений rails из одного URI / домена.

server {
    listen 80;
    server_name dev.example.com;
    root /home/user/app1/public;
    passenger_enabled on;
    passenger_base_uri /app2;
    passenger_base_uri /app3;
    ....truncated...
    rails_spawn_method smart;
    rails_env production;
}

Здесь есть способ лучше, чем принятый ответ. Нет необходимости создавать символические ссылки на папки.

Развертывание приложения в суб-URI или подкаталоге

Вы также можете развернуть приложение по суб-URI вместо корневого URI. Например, предположим, что у вас уже есть виртуальный хост для приложения / веб-сайтов / phusion:

http {
    ...

    server {
        listen 80;
        server_name www.phusion.nl;
        root /websites/phusion/public;
        passenger_enabled on;
    }
}

И вы хотите, чтобы ваше приложение, расположенное в / sites / secondapp, было доступно по URL-адресу http://www.phusion.nl/subpath. Для этого вам необходимо выполнить следующее:

  • Создать локацию с параметром ~ ^/<SUBURI>(/.*|$). Это регулярное выражение, которое гласит: «соответствовать всему, что точно или начинается с /».
  • Внутри блока местоположения установите псевдоним <PATH TO YOUR APPLICATION PUBLIC SUBDIRECTORY>$1.
  • Внутри блока локации установите пассажиру_базе_ури <SUBURI>.
  • Внутри блока местоположения установите пассажиру_app_root <PATH TO YOUR APPLICATION ROOT>.
  • Внутри блока местоположения установите пассажиру_документ_root <PATH TO YOUR APPLICATIOS PUBLIC SUBDIRECTORY>. Внутри блока location установите app_type и startup_file соответственно. Вот пример:

    http {
    ...
    
    server {
        listen 80;
        server_name www.phusion.nl;
        root /websites/phusion/public;
        passenger_enabled on;
    
        # This block has been added.
            location ~ ^/subpath(/.*|$) {
                alias /websites/secondapp/public$1;  # <-- be sure to point to 'public'!
                passenger_base_uri /subpath;
                passenger_app_root /websites/secondapp;
                passenger_document_root /websites/secondapp/public;
                passenger_enabled on;
    
            }
        }
    }
    

Когда вы закончите, перезапустите Nginx. Если вы установили Nginx через наши пакеты Debian или RPM:

sudo service nginx restart

Ссылка: статья