Apache для обслуживания нескольких ruby on rails приложения из одного домена

Я хочу обслуживать несколько различных приложений ruby ​​on rails, используя Apache и Пассажир через единый домен. Все приложения должны использовать один и тот же сертификат и Я хочу доставлять приложения, использующие HTTPS по умолчанию.

# single domain
domain.example.com
# applications accessible via branches
domain.example.com/app_one
domain.example.com/app_two

У меня есть следующая конфигурация для каждого из приложений, которая отлично работает однако только для обслуживания одного приложения. Когда я включаю несколько конфигураций сайта Apache, первое приложение в алфавитном порядке ответит, а остальные не работают.

#app_one.conf

<VirtualHost *:80>
    ServerName domain.example.com/app_one
    Alias /app_one /var/www/app_one/public
    DocumentRoot /var/www/app_one/public
    PassengerRuby /usr/local/rvm/gems/ruby-2.3.8/wrappers/ruby

    <Directory /var/www/app_one/public>
      Allow from all
      Options -MultiViews
      Require all granted
    </Directory>

RewriteEngine on
RewriteCond %{SERVER_NAME} =domain.example.com/app_one
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

</VirtualHost>
#app_one-secure.conf

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName domain.example.com/app_one
    Alias /app_one /var/www/app_one/public
    DocumentRoot /var/www/app_one/public
    PassengerRuby /usr/local/rvm/gems/ruby-2.3.8/wrappers/ruby

    <Directory /var/www/app_one/public>
      Allow from all
      Options -MultiViews
      Require all granted
    </Directory>

SSLCertificateFile      /etc/encrypt/cert.pem
SSLCertificateKeyFile   /etc/encrypt/key.pem
SSLCertificateChainFile /etc/encrypt/keychain.pem

Include /etc/encrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

Я также заставил приложения rails реагировать на отдельные подветвления:

# rails app config.ru
map '/app_one' do
  run AppName::Application
end

Я думаю, мне нужно сделать подветвь конфигурации зависимой. Однако я понятия не имею, как это сделать. Я также попытался упаковать конфигурацию в блок Location . Однако это ограничительно и не принимает всю мою конфигурацию. В конце концов я снова вернул это, так как моя конфигурация была недействительной. Было бы здорово, если бы вы помогли мне разобраться в этом.

0
задан 28 July 2020 в 15:15
1 ответ

Наконец-то я нашел практически работающее решение. Для всех, кто преследует ту же цель. Сейчас я использую только два файла конфигурации. Один для http по умолчанию и один для https. Однако остается одна проблема. Apache всегда обслуживает из той же папки ресурсов, поскольку пассажир выбирает их из корневой информации документа. Я понятия не имею, как предотвратить это.

# 000-default.conf

<VirtualHost *:80>
  # general setup
  
  # name of the server
  ServerName my.server.com

  # ruby for passenger
  PassengerRuby /usr/local/rvm/gems/ruby-2.3.8/wrappers/ruby

  # the default document root which is delivered for the server name
  DocumentRoot /var/www/apps/app_one/public

  # instance setup 

  ## app_one
  Alias /app_one /var/www/apps/app_one/public

  <Location /app_one>
    PassengerBaseURI /app_one
    PassengerAppRoot /var/www/apps/app_one
  </Location>

  <Directory /var/www/apps/app_one/public>
    Allow from all
    Options -MultiViews
    Require all granted
  </Directory>

  ## app_two
  Alias /app_one /var/www/apps/app_two/public

  <Location /app_two>
    PassengerBaseURI /app_two
    PassengerAppRoot /var/www/apps/app_two
  </Location>

  <Directory /var/www/apps/app_two/public>
    Allow from all
    Options -MultiViews
    Require all granted
  </Directory>

RewriteEngine on
RewriteCond %{SERVER_NAME} =my.server.com/app_one 
RewriteCond %{SERVER_NAME} =my.server.com/app_two 
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

</VirtualHost>
# 000-defaults-https.conf

<IfModule mod_ssl.c>
<VirtualHost *:443>
  <VirtualHost *:80>
  # general setup
  
  # name of the server
  ServerName my.server.com

  # ruby for passenger
  PassengerRuby /usr/local/rvm/gems/ruby-2.3.8/wrappers/ruby

  # the default document root which is delivered for the server name
  DocumentRoot /var/www/apps/app_one/public

  # instance setup 

  ## app_one
  Alias /app_one /var/www/apps/app_one/public

  <Location /app_one>
    PassengerBaseURI /app_one
    PassengerAppRoot /var/www/apps/app_one
  </Location>

  <Directory /var/www/apps/app_one/public>
    Allow from all
    Options -MultiViews
    Require all granted
  </Directory>

  ## app_two
  Alias /app_one /var/www/apps/app_two/public

  <Location /app_two>
    PassengerBaseURI /app_two
    PassengerAppRoot /var/www/apps/app_two
  </Location>

  <Directory /var/www/apps/app_two/public>
    Allow from all
    Options -MultiViews
    Require all granted
  </Directory>

SSLCertificateFile      /etc/encrypt/cert.pem
SSLCertificateKeyFile   /etc/encrypt/key.pem
SSLCertificateChainFile /etc/encrypt/keychain.pem

Include /etc/encrypt/options-ssl-apache.conf

</VirtualHost>
</IfModule>
0
ответ дан 29 July 2020 в 07:02

Теги

Похожие вопросы