Настройка виртуальных хостов для приложений Rails на Apache и Mongrel - PullRequest
1 голос
/ 08 сентября 2010

У меня есть один сервер Linux с 3 сайтами на Apache.Давайте назовем их RailsApp1, RailsApp2 и SimpleApp.Оба приложения Rails используют кластеры Mongrel.Другое приложение - это всего лишь один HTML-файл.У меня установлены разные файлы виртуального хоста в Apache для каждого сайта, а также файлы mongrel_cluster.yml для обоих сайтов Rails (код для всего этого приведен внизу).

При любой настройке я могу включить сайтыв апаче просто отлично.И я могу отлично запустить кластеры Mongrel для каждого сайта Rails.И, на самом деле, посещение www.simpleapp.com и www.railsapp1.com в моем браузере работает просто отлично. Однако , www.railsapp2.com доставляет мне массу неприятностей.Вместо того, чтобы показывать код для railsapp2, сервер возвращает HTML-код для railsapp1.Если я отключаю railsapp1 в Apache и затем перехожу на www.railsapp2.com, сервер теперь возвращает HTML-код для simpleapp.Только если я отключу railsapp1 и railsapp2 в Apache, сервер правильно ответит на запрос на сайте www.railsapp2.com.

Любые мысли о том, почему это может происходить?

SimpleApp'sФайл VHOST:

<VirtualHost *:80>
  ServerName www.simpleapp.com
  ServerAlias simpleapp.com
  DocumentRoot /home/nudecanaltroll/public_html/simpleapp
</VirtualHost>

Файл VHOST RailsApp1:

<VirtualHost *:80>
  ServerName railsapp1.com
  DocumentRoot /home/nudecanaltroll/public_html/railsapp1/public
  RewriteEngine On
  <Proxy balancer://mongrel1>
    BalancerMember http://127.0.0.1:5000
    BalancerMember http://127.0.0.1:5001
    BalancerMember http://127.0.0.1:5002
  </Proxy>
  # Timeout in 30 seconds
  ProxyTimeout 30
  # Make sure people go to www.railsapp1.com, not railsapp1.com
  RewriteCond %{HTTP_HOST} ^railsapp1\.com$ [NC]
  RewriteRule ^(.*)$ http://www.railsapp1.com$1 [R=301,NE,L]
  # Redirect all non-static requests to thin
  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
  RewriteRule ^/mongrel1(.*)$ balancer://mongrel1%{REQUEST_URI} [P,QSA,L]
  # Proxy Stuff
  ProxyPass / balancer://mongrel1/
  ProxyPassReverse / balancer://mongrel1/
  ProxyPreserveHost on
  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>
  # Custom log file locations
  ErrorLog  /home/nudecanaltroll/public_html/railsapp1/log/error.log
  CustomLog /home/nudecanaltroll/public_html/railsapp1/log/access.log combined
</VirtualHost>

Файл VHOST RailsApp2:

<VirtualHost *:80>
  ServerName railsapp2.com
  DocumentRoot /home/nudecanaltroll/public_html/railsapp2/public
  RewriteEngine On
  <Proxy balancer://mongrel2>
    BalancerMember http://127.0.0.1:6000
    BalancerMember http://127.0.0.1:6001
    BalancerMember http://127.0.0.1:6002
  </Proxy>
  # Timeout in 30 seconds
  ProxyTimeout 30
  # Make sure people go to www.railsapp2.com, not railsapp2.com
  RewriteCond %{HTTP_HOST} ^railsapp2\.com$ [NC]
  RewriteRule ^(.*)$ http://www.railsapp2.com$1 [R=301,NE,L]
  # Redirect all non-static requests to thin
  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
  RewriteRule ^/mongrel2(.*)$ balancer://mongrel2%{REQUEST_URI} [P,QSA,L]
  # Proxy Stuff
  ProxyPass / balancer://mongrel2/
  ProxyPassReverse / balancer://mongrel2/
  ProxyPreserveHost on
  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>
  # Custom log file locations
  ErrorLog  /home/nudecanaltroll/public_html/railsapp2/log/error.log
  CustomLog /home/nudecanaltroll/public_html/railsapp2/log/access.log combined
</VirtualHost>

Файл mongrel_cluster.yml RailsApp1:

---
address: 127.0.0.1
log_file: log/mongrel.log
port: 5000
cwd: /home/nudecanaltroll/public_html/railsapp1
environment: production
pid_file: /home/nudecanaltroll/public_html/railsapp1/tmp/pids/mongrel.pid
servers: 3

Файл mongrel_cluster.yml RailsApp2:

---
address: 127.0.0.1
log_file: log/mongrel.log
port: 6000
cwd: /home/nudecanaltroll/public_html/railsapp2
environment: production
pid_file: /home/nudecanaltroll/public_html/railsapp2/tmp/pids/mongrel.pid
servers: 3

1 Ответ

0 голосов
/ 12 сентября 2010

Я понял это. По неизвестным мне причинам мне нужно было установить ServerAlias ​​для RailsApp2, а также добавить «www». перед ServerName. Итак, верхняя часть vhost-файла railsapp2.com теперь выглядит так:

<VirtualHost *:80>
  ServerName www.railsapp2.com
  ServerAlias railsapp2.com
  ...

По какой-то причине RailsApp1 не требует, чтобы эти изменения работали правильно.

...