Apache / 2.4.6 (CentOS)
Некоторое время у меня была настроена общая страница для моего сервера Apache, поэтому боты не будут сканировать мой основной сайт, если у них нет моего доменного имени.
Однако недавно я заметил, что это больше не работает с моей конфигурацией. При загрузке страницы по IP-адресу (скажем, 10.20.20.10) я получаю основной сайт (скажем, mysite.net) вместо общего доступа.
Конфигурация выглядит так:
<VirtualHost _default_:80>
ServerName default
# More config ...
</VirtualHost>
<VirtualHost _default_:443>
ServerName default
# More config ...
</VirtualHost>
<VirtualHost 10.20.20.10:80>
ServerName mysite.net
# More config ...
</VirtualHost>
<VirtualHost 10.20.20.10:443>
ServerName mysite.net
# More config ...
</VirtualHost>
Бег apachectl -S
показал мне, что он не загружается по умолчанию:
10.20.20.10:443 is a NameVirtualHost
default server mysite.net (/etc/httpd/sites-enabled/01-mysite.conf:24)
port 443 namevhost mysite.net (/etc/httpd/sites-enabled/01-mysite.conf:24)
*:80 localhost (/etc/httpd/sites-enabled/00-catchall.conf:2)
*:443 localhost (/etc/httpd/sites-enabled/00-catchall.conf:16)
Мне удалось найти способ по умолчанию загружать мой сборщик, но для этого требовалось, чтобы я изменил свой сборщик на тот же IP-адрес прослушивания, что и мой основной виртуальный хост. Не самое идеальное решение. Я бы предположил, что изменение всех vhosts на * также сделает это, но это тоже не идеально.
На основании наблюдений выяснилось, что httpd предпочитает более близкое соответствие и принимает соответствие IP вместо "*". Может ли кто-нибудь пролить свет на то, почему Apache не загружает первый виртуальный хост и что может это исправить?
Мне просто интересно, разве это не имеет смысла, поскольку mysite.net
это первый vhost для VirtualHost 10.20.20.10:80
что он станет сайтом по умолчанию?
Я не имею понятия почему _default_
не работает на вас. Но, возможно, вместо этого сработает что-то подобное. Это то, что вы уже пробовали? Что в этом не идеального?
<VirtualHost 10.20.20.10:80>
ServerName default
# More config ...
</VirtualHost>
<VirtualHost 10.20.20.10:443>
ServerName default
# More config ...
</VirtualHost>
<VirtualHost 10.20.20.10:80>
ServerName mysite.net
# More config ...
</VirtualHost>
<VirtualHost 10.20.20.10:443>
ServerName mysite.net
# More config ...
</VirtualHost>
Этот вопрос / ответ объяснил бы вашу проблему, если бы вы использовали Apache 2.2. Но это не так. Честно говоря, это не то, с чем я слишком хорошо знаком. Очевидно, вы не должны использовать _default_
с виртуальным хостингом на основе имени, скорее *:*
или *:port
.
разница между _default _: * и *: * в контексте VirtualHost
So with a named based virtualhosting configuration:
<Virtualhost *:80> with ServerName foo.com means "on all IPs managed on this host", "on port 80", "if the request host header is foo.com" I'll use this virtualhost
<Virtualhost *:*> with Servername foo.com means "on all IPs managed on this host", "on all ports", "if the request host header is foo.com" I'll use this virtualhost
<Virtualhost 10.0.0.2:*> with Servername foo.com means "for request incoming from my network interface 10.0.0.2", "on all ports", "if the request host header is foo.com" I'll use this virtualhost
<Virtualhost _default_:*> with Servername foo.com : should not be used with name based virtualhosting
And on an IP based Virtualhosting:
<Virtualhost 10.0.0.2:*> means "I'll use this virtualhost for request coming on my 10.0.0.2 interface"
<Virtualhost _default_:443> means "I'll use this virtualhost for all other network interface on my host for request coming on port 443"
<Virtualhost _default_:*> means "I'll use this virtualhost for all other network interface on my host, if it is not matched by a previous rule, and if the request host header is not matched by a named based virtualhost"
Ubuntu такой же, как и вы Я попытался назначить IP-адрес одному из vhosts (example2.com), а не <VirtualHost *:80>
и теперь он переопределяет vhost по умолчанию. Кажется, именно так работает Apache. A * не может переопределить IP-адрес. curl 192.168.1.143
теперь дает мне example2.com вместо общей страницы.
$ sudo apachectl -S
VirtualHost configuration:
192.168.1.143:80 example2.com (/etc/apache2/sites-enabled/example2.com.conf:1)
*:80 is a NameVirtualHost
default server www1.swass (/etc/apache2/sites-enabled/000-default.conf:1)
port 80 namevhost www1.swass (/etc/apache2/sites-enabled/000-default.conf:1)
port 80 namevhost example.com (/etc/apache2/sites-enabled/example.com.conf:1)
wild alias *.example.com
Удачи