У меня есть сервер Apache2 с несколькими виртуальными хостами. Один из доменов теперь хочет использовать SSL, чтобы они могли выполнять платежи с помощью Stripe.
У меня есть отдельный IP-адрес для этого домена (domain1), чем основной IP-адрес сервера. (основной сервер 99.99.99.88, отдельный IP 99.99.99.99)
Прежде чем я перебью все, я пытаюсь заставить его работать на порту 80 (без SSL), чтобы я знал, что мои вирты работают.
Когда я перехожу на IP (99.99.99.99), он преобразуется в domain2, который является доменом по умолчанию для сервера, а не domain1.
Команда Listen в httpd.conf - Listen 80.
Вот соответствующий код для моего vhosts.conf
NameVirtualHost *:80
NameVirtualHost 99.99.99.99:80
<VirtualHost 99.99.99.99:80>
ServerName domain1.com
DocumentRoot /var/www/vhosts/domain1.com/httpdocs
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/vhosts/domain2.com/html
ServerName www.domain2.com
</VirtualHost>
<VirtualHost *:80>
ServerName portal.domain2.com
DocumentRoot /var/www/vhosts/domain2.com/portal/public
</VirtualHost>
<VirtualHost *:80>
ServerName demo.domain2.com
DocumentRoot /var/www/vhosts/domain2.com/demo/public
</VirtualHost>
<VirtualHost *:80>
ServerName domain3.info
DocumentRoot /var/www/vhosts/domain3.info/html
</VirtualHost>
<VirtualHost *:80>
ServerName domain1.com
DocumentRoot /var/www/vhosts/domain1.com/httpdocs
</VirtualHost>
Что мне нужно сделать, чтобы я мог получить доступ к домену 1, когда я попал на сервер с использованием 99.99.99.99?
Первая запись *: 80, для которой httpd видит VirtualHost, станет сайтом по умолчанию для *: 80. Из-за этого, если вы введете любое имя хоста, которое не является допустимой записью ServerName, оно попадет в вашу запись domain2.
Вы можете помочь остановить это поведение, указав свой «истинный» базовый веб-сайт как самый первый виртуальный хост *: 80 в вашей конфигурации.
Хорошей практикой является индивидуальный таргетинг на веб-сайты с определенным IP-адресом, например:
NameVirtualHost 99.99.99.99:80
<VirualHost 99.99.99.99:80>
ServerName domain2.com
...
</VirtualHost>
Выполнение вышеизложенного должно гарантировать, что сайты с определенным IP-адресом обслуживаются из явной записи для указанного IP-адреса, а не по умолчанию из-за «наиболее специфичных-конфигурационных-выигрышей».
Ссылка Вот:
Наследование ServerName Лучше всегда явно указывать ServerName в каждом виртуальном хосте на основе имени. Если VirtualHost не указывает ServerName, имя сервера будет унаследовано от базовой конфигурации сервера. Если имя сервера не было указано глобально, оно определяется при запуске через обратное разрешение DNS первого адреса прослушивания. В любом случае это унаследованное имя сервера будет влиять на разрешение виртуального хоста на основе имени, поэтому лучше всегда явно указывать имя сервера в каждом виртуальном хосте на основе имени.
Например, предположим, что вы обслуживаете домен www.example.com и хотите добавить виртуальный хост other.example.com, который указывает на тот же IP-адрес. Затем вы просто добавляете в httpd.conf следующее:
<VirtualHost *:80>
# This first-listed virtual host is also the default for *:80
ServerName www.example.com
ServerAlias example.com
DocumentRoot /www/domain
</VirtualHost>
<VirtualHost *:80>
ServerName other.example.com
DocumentRoot /www/otherdomain
</VirtualHost>