Назад | Перейти на главную страницу

Два статических IP-адреса разрешаются в один и тот же каталог Apache

В настоящее время у меня есть выделенный сервер с двумя статическими 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-адресу, он будет соответствовать только правильному виртуальному хосту.