В настоящее время у меня есть выделенный сервер с двумя статическими IP-адресами, указывающими на него, и двумя доменными именами, указывающими на их соответствующие статические IP-адреса. У обоих этих доменов есть виртуальные хосты, и оба этих домена разрешаются в правильный каталог Apache. Назовем их домен1 (связанный с IP1 через DNS) и домен2 (связанный с IP2 через DNS). В качестве имени хоста установлено полное доменное имя (www.domain1.com).
Проблема в том, что если я пытаюсь перейти через любой IP-адрес в браузере, он всегда отсылает меня к домену 1. Я бы хотел, чтобы этого не было. Я хотел бы, чтобы прямые IP-адреса либо разрешали ошибку, либо разрешали их конкретные домены. Что я делаю не так?
РЕДАКТИРОВАТЬ: По просьбе комментатора, вот оба файла виртуального хоста. 000-default.conf пуст.
domain1.com.conf, обратите внимание, что это установка Symfony и работает без www:
<VirtualHost *:80>
ServerName domain1.com
ServerAlias domain1.com
DocumentRoot /var/www/html/domain1/web
<Directory /var/www/html/domain1/web>
AllowOverride All
Order Allow,Deny
Allow from All
</Directory>
# uncomment the following lines if you install assets as symlinks
# or run into problems when compiling LESS/Sass/CoffeeScript assets
# <Directory /var/www/html/domain1>
# Options FollowSymlinks
# </Directory>
ErrorLog /var/log/apache2/project_error.log
CustomLog /var/log/apache2/project_access.log combined
</VirtualHost>
<VirtualHost *:443>
ServerName domain1.com
ServerAlias domain1.com
SSLEngine on
SSLCertificateFile "/etc/ssl/certs/domain1_com.pem"
SSLCertificateKeyFile "/etc/ssl/private/domain1.key"
SSLCACertificateFile "/etc/ssl/certs/domain1_cert.pem"
DocumentRoot /var/www/html/domain1/web
<Directory /var/www/html/domain1/web>
AllowOverride All
Order Allow,Deny
Allow from All
</Directory>
# uncomment the following lines if you install assets as symlinks
# or run into problems when compiling LESS/Sass/CoffeeScript assets
# <Directory /var/www/html/domain1>
# Options FollowSymlinks
# </Directory>
ErrorLog /var/log/apache2/project_error.log
CustomLog /var/log/apache2/project_access.log combined
</VirtualHost>
www.domain2.conf, у этого еще нет сертификата ssl, поэтому я ввел только виртуальный хост для порта 80;
<VirtualHost *:80>
ServerName domain2.com
ServerAlias www.domain2.com
DocumentRoot /var/www/html/domain2
<Directory /var/www/html/domain2>
AllowOverride All
Order Allow,Deny
Allow from All
</Directory>
# uncomment the following lines if you install assets as symlinks
# or run into problems when compiling LESS/Sass/CoffeeScript assets
# <Directory /var/www/html/domain2>
# Options FollowSymlinks
# </Directory>
ErrorLog /var/log/apache2/domain2.log
CustomLog /var/log/apache2/domain2.log combined
</VirtualHost>
ServerName domain1.com
ServerAlias domain1.com
Псевдоним нужен только для добавления дополнительных имен хостов. Вам не нужно добавлять псевдоним для того, что уже является ServerName.
Что касается основной проблемы, у вас есть два виртуальных хоста, которые прослушивают любой IP-адрес. Когда поступает запрос, Apache будет смотреть на виртуальные хосты, прослушивающие этот адрес (который в вашем случае является обоими, независимо от IP-адреса, который вы вводите), и попытается сопоставить имя сервера. Если не может, он просто вернет первый виртуальный хост.
Вам нужно что-то вроде следующего -
<VirtualHost ip.address.one:80>
... Website One ...
</VirtualHost>
<VirtualHost ip.address.two:80>
... Website Two ...
</VirtualHost>
То же самое для SSL (но, очевидно, с портом 443)
Таким образом, когда запрос приходит по IP-адресу, он будет соответствовать только правильному виртуальному хосту.