Несколько доменов, несколько Vhosts, отдельные приложения рельсы - PullRequest
0 голосов
/ 28 июня 2011

Я пытаюсь разместить несколько разных приложений rails на одном VPS, используя несколько доменов.Я использую Apache 2.2.17 на Ubuntu 10.10.Для Apache у меня есть несколько файлов vhost, так что я могу легко включать и отключать определенные сайты без необходимости их комментировать или удалять.Кроме того, я также использую mod_rewrite, чтобы несколько доменов, которые идут в одно и то же приложение rails, казалось, переходили на один и тот же URL-адрес, поэтому я не испытываю особого интереса к поисковым системам в плане дублирования контента.

Я считаю, что мой DNS настроен правильно.Для каждого из доменов у меня есть субдомен www, а также некоторые специфичные для сайта субдомены, такие как блоги и т. Д. Проблема, с которой я сталкиваюсь, заключается в том, что Apache, по-видимому, немедленно сопоставляет субдомен www и не проверяетдополнительный URL за ним.Изменение ServerAlias ничего не дает.Например, используя мои настройки, если я ввожу davidheartsrachel.com, я правильно захожу на свой свадебный сайт.Однако, если я использую www.davidheartsrachel.com, я перехожу на другой мой веб-сайт, в мой бизнес по разработке программного обеспечения.URL не переписывается;он остается как davidheartsrachel.com вместо afewguyscoding.com.

Единственный способ, которым я смог правильно заставить его работать, - это использовать mod_rewrite в первичном файле vhost для перенаправления в файл vhost свадебного сайта (выМожно видеть, что у меня есть это в основном файле vhost, но это закомментировано для целей этого вопроса).Это не похоже на меня?Должен ли я получить другой IP и делать IP vhosts вместо vhosts на основе имени?

Когда я выполняю apachectl -S, я получаю следующее:

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server afewguyscoding.com (/etc/apache2/sites-enabled/afewguyscoding.com:1)
         port 80 namevhost afewguyscoding.com (/etc/apache2/sites-enabled/afewguyscoding.com:1)
         port 80 namevhost blog.afewguyscoding.com (/etc/apache2/sites-enabled/afewguyscoding.com:69)
         port 80 namevhost lbbs.afewguyscoding.com (/etc/apache2/sites-enabled/afewguyscoding.com:84)
         port 80 namevhost davidheartsrachel.com (/etc/apache2/sites-enabled/davidheartsrachel.com:1)
         port 80 namevhost dhr.afewguyscoding.com (/etc/apache2/sites-enabled/davidheartsrachel_staging:1)
Syntax OK

Я замечаю, что afewguyscoding.comсайт по умолчанию - однако не нужно ли выполнять полное совпадение строк для определения правильного сайта?

vhost-файл первичного сайта

<VirtualHost *:80>
  ServerAdmin david.stites@afewguyscoding.com
  ServerName afewguyscoding.com
  ServerAlias davidstites.com, 5280software.com, milehigh-software.com, milehighsoftware.org
  ServerAlias www.5280software.com, www.milehigh-software.com, www.milehighsoftware.org, www.davidstites.com, www.afewguyscoding.com

  # this tells rails that it will run in production mode
  # this is for rails < 3.x
  RailsEnv production

  DocumentRoot /var/www/afewguyscoding/current/public
  DirectoryIndex index.html

  # custom log file locations
  # possible values include: debug, info, notice, warn, error, crit,
  # alert, emerg.
  LogLevel alert
  ErrorLog  /var/www/afewguyscoding/current/log/error.log
  CustomLog /var/www/afewguyscoding/current/log/access.log combined

  # allows compression of text based mime.types
  AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript text/css application/x-javascript
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  BrowserMatch ^Mozilla/4\.0[678] no-gzip
  BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

  FileETag None
  RewriteEngine On

  # check for maintenance file and redirect all requests
  RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
  RewriteCond %{REQUEST_URI} !\.(css|jpg|png|gif)$
  RewriteCond %{REQUEST_URI} !^/ws/
  RewriteCond %{SCRIPT_FILENAME} !maintenance.html
  RewriteRule ^.*$ /system/maintenance.html

  #RewriteCond %{HTTP_HOST} ^www.davidheartsrachel.com$
  #RewriteRule ^(.*)$ http://davidheartsrachel.com$1 [L]

  RewriteCond %{HTTP_HOST} ^www.davidstites.com$
  RewriteRule ^(.*)$ http://www.afewguyscoding.com$1 [R=301,L]

  <Directory /var/www/afewguyscoding/current/public>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
  </Directory>

  # In case I ever need CGI
  #ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
  #<Directory "/usr/lib/cgi-bin">
  #     AllowOverride None
  #     Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
  #     Order allow,deny
  #     Allow from all
  #</Directory>

  # how we can restrict access to documents from the local subnet
  #Order deny,allow
  #Deny from all
  #Allow from 127.0.0.0/255.0.0.0 ::1/128

  <Location /blog>
    PassengerEnabled off
  </Location>
</VirtualHost>

<VirtualHost *:80>
  ServerAdmin info@afewguyscoding.com
  ServerName blog.afewguyscoding.com

  DocumentRoot /var/www/wpress
  DirectoryIndex index.php

  <Directory /var/www/afewguyscoding/current/public>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
  </Directory>
</VirtualHost>

Vhost файл свадебного сайта

<VirtualHost *:80>
  ServerAdmin info@davidheartsrachel.com
  ServerName davidheartsrachel.com
  ServerAlias rachelanddavid.net, rachelanddavidstites.com, rachelanddavidwedding.com
  ServerAlias www.davidheartsrachel.com, www.rachelanddavidstites.com, www.rachelanddavidwedding.com, www.rachelanddavid.net

  # this tells rails that it will run in production mode
  # this is for rails < 3.x
  RailsEnv production
  # this is for rails >= 3.x
  RackEnv production

  DocumentRoot /var/www/davidheartsrachel/current/public
  DirectoryIndex index.html

  # Custom log file locations
  # Possible values include: debug, info, notice, warn, error, crit, alert and emerg,
  LogLevel alert
  ErrorLog  /var/www/davidheartsrachel/current/log/error.log
  CustomLog /var/www/davidheartsrachel/current/log/access.log combined

  # Allows compression of text based mime types
  AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript text/css application/x-javascript
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  BrowserMatch ^Mozilla/4\.0[678] no-gzip
  BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

  FileETag None
  RewriteEngine On

  # Check for maintenance file and redirect all requests
  RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
  RewriteCond %{REQUEST_URI} !\.(css|jpg|png|gif)$
  RewriteCond %{SCRIPT_FILENAME} !maintenance.html
  RewriteRule ^.*$ /system/maintenance.html [L]

  RewriteCond %{HTTP_HOST} ^www.rachelanddavidwedding.com$
  RewriteRule ^(.*)$ http://www.davidheartsrachel.com$1 [R=301,L]

  RewriteCond %{HTTP_HOST} ^www.rachelanddavidstites.com$
  RewriteRule ^(.*)$ http://www.davidheartsrachel.com$1 [R=301,L]

  # Static cache
  RewriteCond %{REQUEST_METHOD} !^POST$
  RewriteCond /var/www/davidheartsrachel/current/tmp/cache/static$1/index.html -f
  RewriteRule ^(.*)$ /var/www/davidheartsrachel/current/tmp/cache/static$1/index.html [L]

  <Directory /var/www/davidheartsrachel/current/public>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    Allow from All
  </Directory>
</VirtualHost>

Если вы можете найти какую-либо дополнительную информацию, которая может быть полезна, пожалуйста, попросите меня опубликовать ее.

Редактировать:

Позвольте мне попытаться прояснить это.В самой важной форме мой вопрос: почему переход на davidheartsrachel.com приводит вас к www.afewguyscoding.com, а davidheartsrachel.com - на davidheartsrachel.com, исходя из моей конфигурации выше

Ответы [ 2 ]

0 голосов
/ 29 июня 2011

Ответ в том, что я неправильно разделил записи в ServerAlias ​​запятой таким образом:

ServerAlias rachelanddavid.net, rachelanddavidstites.com, rachelanddavidwedding.com, www.davidheartsrachel.com, www.rachelanddavidstites.com, www.rachelanddavidwedding.com, www.rachelanddavid.net

Предполагается, что это пробел:

ServerAlias rachelanddavid.net rachelanddavidstites.com rachelanddavidwedding.com www.davidheartsrachel.com www.rachelanddavidstites.com www.rachelanddavidwedding.com www.rachelanddavid.net
0 голосов
/ 28 июня 2011

На моих серверах я не определяю основной сайт в моем основном файле httpd.conf. Я делаю весь виртуальный хостинг в отдельных conf-файлах приложения.

Единственное, что у меня есть в моем основном httpd.conf, это строка NameVirtualHost *:80

Вот суть способа, которым вы можете попробовать это. Я вытащил все настройки свадебного сайта из конфигурации вашего основного сайта Я установил его так, чтобы davidstites.com, afewguyscoding.com и www.davidstites.com перенаправляли на www.afewguyscoding.com. Другие домены (milehigh et al) не подвержены влиянию. Я не уверен, куда вы хотели, чтобы те пошли.

Все связанные со свадьбой домены перенаправляют на www.davidheartsrachel.com.

Я заметил, что, по-моему, произошла ошибка в конфигурации вашего основного сайта. В конце, где вы установили права доступа к каталогу, вы использовали каталог / var / www / afewguyscoding / current / public вместо / var / www / wpress, который является DocumentRoot. Исправление, которое я сделал там, находится в строке 74 первого документа в этой сущности.

...