Субдомены виртуальных хостов указывают на неправильный каталог

Я создал 2 виртуальных хоста http://web1.com:2107, указывающих на папку «/var/www/web1», и второй http://web2.com:2107, указывающих на «/var/www/web2». все поддомены в web2 работают нормально, но в случае web1.com:2107 я вижу только домашнюю страницу. когда я пытаюсь открыть любой поддомен из web1, например http://games.web1.com:2107, он указывает на домашнюю страницу web2, то есть каталог /var/www/web2/

Что-то не так в конфигурации?

ниже приведен код для хостов, которые я использую

<VirtualHost *:80>
ServerName  web2.com
ServerAdmin [email protected]
ServerAlias http://www.web2.com
DocumentRoot /var/www/web2
<Directory />
    Options FollowSymLinks
    AllowOverride All
</Directory>
<Directory /var/www/web2>
    Options Indexes FollowSymLinks Multiviews
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
    AllowOverride All
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
</Directory>

ErrorLog    /var/www/web2/error80.log
CustomLog   /var/www/web2/access80.log Combined
</VirtualHost>

<VirtualHost *:2107>
ServerName  web2.com    
ServerAdmin [email protected]
ServerAlias http://www.web2.com
DocumentRoot /var/www/web2
<Directory />
    Options FollowSymLinks
    AllowOverride All
</Directory>
<Directory /var/www/web2>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
    AllowOverride All
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
</Directory>

    ErrorLog /var/www/web2/error.log
CustomLog   /var/www/web2/access80.log Combined
LogLevel warn

CustomLog /var/log/apache2/web2.com_access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride All
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

</VirtualHost>

===================================================================

NameVirtualHost *:2107
<VirtualHost *:2107>
    ServerName web1.com
    ServerAlias http://web1.com
    DocumentRoot /var/www/web1
    <Directory /var/www/web1/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
    </Directory>
    ErrorLog        /var/www/web1/error.log
    CustomLog       /var/www/web1/access.log Combined
</VirtualHost>

person www.amitpatil.me    schedule 15.12.2011    source источник
comment
У меня было то же самое, и в моем случае часть с NameVirtualHost *: 80 была файлом, который не был включен в основной httpd.conf, поэтому виртуальные хосты вообще не были включены, и поэтому все указывало на виртуальный хост по умолчанию.   -  person jkulak    schedule 19.04.2013


Ответы (4)


Когда у вас есть несколько виртуальных хостов, один из них является виртуальным хостом по умолчанию. Это первый в алфавитном порядке файл, содержащий определение VirtualHost.

Когда вы удаляете VirtualHost. Если у вас все еще есть запись в файле Hosts или запись DNS, когда запрос выполняется на вашем сервере Apache, если он не может найти правильный VirtualHost (ServerName или ServerAlias), то для обработки ответа берется значение по умолчанию.

При добавлении нового виртуального хоста, если вы допустили ошибку в ServerName или ServerAlias, у вас также будет VH по умолчанию.

Обновить

Теперь, когда вопрос завершен, я вижу, что вы неправильно используете ServerAlias. Все ваши поддомены должны быть перечислены в директивах ServerAlias ​​без http:// Итак, вы должны иметь:

ServerName web1.com
ServerAlias www.web1.com
ServerAlias games.web1.com

Вы могли бы попробовать *.web1.com. В противном случае, когда вы используете имя, которое не указано в списке, используется виртуальный хост по умолчанию (и здесь виртуальный хост web2.com определен ранее, поэтому он используется по умолчанию для этого порта)

person regilero    schedule 16.12.2011
comment
Меньше шансов ошибиться, у меня меньше кода для нового VH. Ниже приведен код NameVirtualHost *: 2107 ‹VirtualHost *: 2107 › ServerName tab.com ServerAlias ​​tab.com DocumentRoot /var/www/tab3 ‹Directory /var/www/tab3/› Параметры Индексы FollowSymLinks MultiViews AllowOverride All ‹/Directory› ‹/VirtualHost› - person www.amitpatil.me; 17.12.2011
comment
AllowOverrid All означает, что вы можете иметь файлы .htaccess, добавляющие что-то в вашу конфигурацию. Вместо этого поставьте None и удалите Multiviews. - person regilero; 17.12.2011
comment
Я внес изменения, но все еще получаю ту же проблему... когда я открываю субдомены, он указывает на неправильный каталог :( я что-то упускаю?? - person www.amitpatil.me; 17.12.2011
comment
добавьте разные директивы AccessLog в свой VH и проверьте ту, которая действительно попала. Запустите Apache2 -S, чтобы получить список доступных VH и т. д. И отредактируйте свои вопросы, используя код из обоих VH, а не только из одного. - person regilero; 18.12.2011
comment
Я только что попытался добавить другой журнал доступа для обоих VH, когда я открываю web1, он регистрируется в файле журнала web1, web2 регистрируется в журнале доступа web2. нет смешивания - person www.amitpatil.me; 18.12.2011
comment
.. Так что, возможно, сделать четкое объяснение вашей проблемы. На стороне Apache у вас есть два VH. работает хорошо. Сделайте понятный тест-кейс. полный . чтобы мы могли найти что-то странное внутри. Возможно, вы забыли порт в своей ссылке. - person regilero; 18.12.2011
comment
Извините, если я вас запутал :( Хорошо, позвольте мне объяснить еще раз. Есть 2 VH. Домашняя страница и все поддомены с www.web2.com:2107 работают нормально. но когда я открываю web1.com:2107 только на этот раз он указывает на правильный каталог... когда я пытаюсь вызвать любой поддомен, например games.web1.com указывает на корневой каталог web1.com:2107 - person www.amitpatil.me; 18.12.2011
comment
@Amit Patil: вы пытаетесь быть примером плохого способа задать вопрос :-). Прекратите комментировать. Отредактируйте свой вопрос и поместите в него четкое объяснение ваших проблем. Может быть, просто пытаясь объяснить себе, в чем заключается ситуация, вы сами найдете ответ. Но если вы не сделаете этого шага, никто не найдет вашу проблему. - person regilero; 18.12.2011

После изменения конфигурации Apache вам необходимо перезапустить службу. Не уверен, что проблема именно в этом, но проверить никогда не помешает ;)

person SuperTron    schedule 15.12.2011
comment
Да, забыл упомянуть, но я перезапускал службу 2-3 раза. - person www.amitpatil.me; 16.12.2011
comment
О, я вижу, извините, я не мог больше помочь, рад, что у вас все заработало: P - person SuperTron; 16.12.2011

Ну, у меня проблема наполовину, в файле HOSTS осталась запись, поэтому эта страница все еще была доступна с удаленной записью имени хоста. Теперь половина проблемы все еще там. теперь я создал еще одну запись хоста и указал на местоположение diff, но все еще указывает на старое местоположение :(

person www.amitpatil.me    schedule 16.12.2011

Для пользователей Cloudflare, у которых есть проблемы с SSL и неправильным каталогом:

Измените режим SSL в Crypto с Flexible на Full.

Это помогло мне.

person COOLGAMETUBE    schedule 02.03.2017
comment
Полный Строгий или только полный? - person Yohanes AI; 09.09.2019