Мне удалось успешно настроить 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 в одном домене.
Предыдущий ответ:
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. Например, предположим, что у вас уже есть виртуальный хост для приложения / веб-сайтов / 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>
.<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
Ссылка: статья