Я размещаю два сайта на одном сервере. У каждого есть свой собственный VirtualHost. Первый сайт работает нормально, но когда я пытаюсь получить доступ ко второму, меня перенаправляют на первый. Это похоже на то, что Apache не распознает правильный VirtualHost по ServerName и перенаправляет меня на сайт по умолчанию (первый).
Есть ли журнал или что-то еще, где я могу увидеть, какие шаги предпринимает Apache, когда обрабатывает мой запрос? Регистрирует ли он где-нибудь, какое имя сервера он использует, когда пытается найти соответствующий VirtualHost?
Обновить:
Я добавил раздел VirtualHost для поддомена моего второго сайта, и это работает. Он отображает страницу с правильного сервера приложений, который работает в порту 8501, когда я ввожу "interface.domain.com" в свой браузер. Но когда я пробую "www.domain.com", он перенаправляется на мой первый сайт.
Ниже мой файл виртуального хоста для второго сайта.
<VirtualHost *:80>
ServerName www.domain.com
DocumentRoot /home/domain/current/public
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ http://localhost:8501/$1 [P]
</VirtualHost>
<VirtualHost *:80>
ServerName interface.domain.com
DocumentRoot /home/domain/current/public
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ http://localhost:8501/$1 [P]
</VirtualHost>
apache2ctl -S
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 1.2.3.4. Set the 'ServerName' directive globally to suppress this message
VirtualHost configuration:
1.2.3.4:443 www.domainfirst.com (/etc/apache2/sites-enabled/https_www_domainfirst_com.conf:1)
1.2.3.4:80 is a NameVirtualHost
default server domainfirst.com (/etc/apache2/sites-enabled/domainfirst_com.conf:1)
port 80 namevhost domainfirst.com (/etc/apache2/sites-enabled/domainfirst_com.conf:1)
port 80 namevhost www.domainfirst.com (/etc/apache2/sites-enabled/www_domainfirst_com.conf:1)
*:80 is a NameVirtualHost
default server domain.com (/etc/apache2/sites-enabled/domain_com.conf:1)
port 80 namevhost domain.com (/etc/apache2/sites-enabled/domain_com.conf:1)
port 80 namevhost www.domain.com (/etc/apache2/sites-enabled/www_domain_com.conf:1)
port 80 namevhost interface.domain.com (/etc/apache2/sites-enabled/www_domain_com.conf:10)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex watchdog-callback: using_defaults
Mutex rewrite-map: using_defaults
Mutex ssl-stapling: using_defaults
Mutex proxy: using_defaults
Mutex ssl-cache: using_defaults
Mutex default: dir="/var/lock/apache2" mechanism=fcntl
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33
Решение:
Очистите кеш браузера. В моем браузере было кэшировано правило перенаправления запроса на другой сайт.
Делать не смешайте определения IP: port и *: port в вашем <VirtualHost>
теги, если вы не очень опытный администратор Apache и точно не знаете, что делаете.
Любой домен, который разрешается 1.2.3.4
(в вашем примере) будет обслуживаться вашим, привязанным к 1.2.3.4:80, независимо от того, какое имя хоста используется.
Если имена серверов и сервер появляются на вашем виртуальном хосте *: 80 не решить 1.2.3.4, тогда что-то еще не так. Если они разрешат этот IP-адрес, просто измените вас <VirtualHost 1.2.3.4:80>
к <Virtualhost *:80>
Дополнительный комментарий: если у вас только 1 IP на вашем сервере, используйте только версию *: port, это позволит избежать путаницы
Дополнительные комментарии: Частично проблема может заключаться в том, как вы дезинфицируете все доменные имена. этот должен делаться последовательно, иначе наши усилия будут напрасными. Apache определяет, на какой сервер отправить запрос, следующим образом. Это просто работает, любой ошибка в этом процессе никогда не выдержит даже самого элементарного тестирования для выпуска Apache:
<VirtualHost>
тег для этого IP / порта, тогда этот виртуальный хост получит запросServerName
и ServerAlias
директивы для любых <VirtualHost>
который соответствует IP / порту, к которому пришло соединение, и соответствует HTTP Host
заголовок, который пришел с запросом. Первый <VirtualHost>
на выходе apachectl -S
это совпадение и получит запрос.apachectl -S
для конкретной комбинации ip / port.Помните IP может быть просто *
.