Виртуальный хост Apache по умолчанию не загружен в правильном порядке

Apache / 2.4.6 (CentOS)

Некоторое время у меня была настроена общая страница для моего сервера Apache, чтобы боты не сканировали мой основной сайт, если только у них было мое доменное имя.

Однако недавно я заметил, что это больше не работает с моей конфигурацией. При загрузке страницы по IP-адресу (скажем, 10.20.20.10) я получаю основной сайт (скажем, mysite.net) вместо catchall.

Конфигурация выглядит так:

<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)

Мне удалось найти способ, чтобы моя общая загрузка была по умолчанию, но для этого потребовалось, чтобы я изменил свой catchall на тот же IP-адрес прослушивания, что и мой основной виртуальный хост. Не самое идеальное решение. Я бы предположил, что изменение всех vhosts на * тоже подойдет, но это тоже не идеально.

На основании наблюдений оказалось, что httpd предпочитает более близкое соответствие и принимает соответствие IP вместо "*". Может ли кто-нибудь пролить свет на то, почему Apache не загружает первый виртуальный хост и что может это исправить?

2
задан 19 August 2016 в 03:36
1 ответ

Мне просто интересно, не имеет ли смысл, что поскольку mysite.net является первым призраком для 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 Context

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), а не , и теперь он переопределяет фрост по умолчанию. Похоже, что именно так работает Apache. A * не может переопределить IP-адрес. curl 192.168.1.143 теперь дает мне example2.com вместо страницы catchall.

$ 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

Удачи

.
0
ответ дан 3 December 2019 в 14:22

Теги

Похожие вопросы