Обслуживание двух веб-сайтов с Apache с одним доменным именем и одним IP-адресом - PullRequest
5 голосов
/ 09 февраля 2010

Я пытаюсь разместить два веб-сайта с использованием Apache с одного и того же сервера Ubuntu. У меня есть один IP-адрес, и у меня есть только один домен (который разрешается в IP-адрес). Поэтому я хочу, чтобы запросы к доменному имени давали один сайт, а запросы по ip-адресу давали другой.

У меня есть символические ссылки в / etc / apache2 / sites-enabled на два файла, указывающие на конфигурацию для моих двух сайтов.

Один содержит:

<VirtualHost 1.2.3.4:80>
    ServerName 1.2.3.4
    stuff
</VirtualHost>

, в то время как другой содержит

<VirtualHost domain.net:80>
    ServerName domain.net
    stuff
</VirtualHost>

Однако, когда я запускаю Apache, я получаю следующее сообщение:

[warn] VirtualHost 1.2.3.4:80 overlaps with VirtualHost domain.net:80, the first has precedence, perhaps you need a NameVirtualHost directive

и когда я указываю свой браузер на domain.net или 1.2.3.4, я получаю сайт, который хочу связать с IP-адресом.

Если я удаляю любую символическую ссылку, то указание браузера на доменное имя или IP-адрес дает единственный включенный веб-сайт. (Как и следовало надеяться.)

Насколько я понимаю, оба файла конфигурации на сайтах с включенной загрузкой загружаются одновременно, и тот, который содержит IP-адрес, превосходит тот, который содержит доменное имя. Предупреждение предлагает обратиться к директиве NameVirtualHost, но вся помощь, которую я могу найти в Интернете, относится к случаям, когда у вас есть два доменных имени, указывающих на один и тот же IP-адрес.

Как всегда, и помощь или совет будет высоко ценится.

(Судя по всему, оба веб-сайта являются приложениями Rails, и я использую Passenger, но я не думаю, что это важно здесь.)

Ответы [ 3 ]

9 голосов
/ 09 февраля 2010

Вот как я это делаю:

NameVirtualHost 1.2.3.4:80

<VirtualHost 1.2.3.4:80>
    ServerName localhost
    DocumentRoot /var/www/default
</VirtualHost>

<VirtualHost 1.2.3.4:80>
    ServerName mydomain.net
    DocumentRoot /var/www/mydomain
</VirtualHost>

Apache ищет подходящий виртуальный хост для каждого запроса. Если он не находит тот, который соответствует ServerName или любому из ServerAliases, тогда он берет первый. Неважно, что вы используете для ServerName в первом VirtualHost, так как он всегда будет использоваться, если ни один из других VirtualHosts не совпадет.

4 голосов
/ 04 ноября 2011

Была эта проблема, вот что я сделал:

Редактировать httpd.conf

sudo vi /etc/apache2/httpd.conf

Добавить эту строку

NameVirtualHost *:80

ПРИМЕЧАНИЕ. Вы можете заменить *: 80 на your_ip_address: 80

Теперь создайте файл конфигурации имени домена. Я использую имя_домена.com

sudo vi /etc/apache2/sites-available/domain.com

Добавить это в файл

<VirtualHost *:80>
     ServerAdmin admin@domain.com
     ServerName www.domain.com
     ServerAlias domain.com
     DocumentRoot /var/www/domain.com/public_html/
     ErrorLog /var/www/domain.com/logs/error.log
     CustomLog /var/www/domain.com/logs/access.log combined
</VirtualHost>

Убедитесь, что каталоги в конфигурации domain.com существуют

/var/www/domain.com/public_html/
/var/www/domain.com/logs

ПРИМЕЧАНИЕ. При необходимости используйте команду mkdir, например:

sudo mkdir /var/www/domain.com/public_html/
sudo mkdir /var/www/domain.com/logs

Теперь нам нужно включить новый конфигурационный файл, как этот

sudo a2ensite domain.com

Вы должны увидеть уведомление для перезапуска apache, используйте эту команду

/etc/init.d/apache2 restart

Теперь нам нужен тестовый файл для просмотра

sudo vi /var/www/domain.com/public_html/index.html

Добавить текст

Hello domain.com

Откройте веб-браузер и перейдите на новый домен

http://domain.com
0 голосов
/ 09 февраля 2010

Убедитесь, что у вас есть инструкция

NameVirtualHost *:80

в /etc/apache2/ports.conf

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...