У меня есть несколько именованных хостов на веб-сервере Apache (CentOS 5, Apache 2.2.3).
Каждый виртуальный хост имеет свой собственный файл конфигурации в /etc/httpd/vhosts.d
и эти файлы конфигурации vhost включены из основного httpd conf с помощью ... Include vhosts.d/*.conf
Вот пример одного из vhost conf ...
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.domain.biz
ServerAlias domain.biz www.domain.biz
DocumentRoot /var/www/www.domain.biz
<Directory /var/www/www.domain.biz>
Options +FollowSymLinks
Order Allow,Deny
Allow from all
</Directory>
CustomLog /var/log/httpd/www.domain.biz_access.log combined
ErrorLog /var/log/httpd/www.domain.biz_error.log
</VirtualHost>
Теперь я, когда кто-то пытается получить доступ к серверу напрямую, используя общедоступный IP-адрес, он получает первый виртуальный хост, указанный в агрегированной конфигурации (так что в моем случае это алфавитный порядок от vhosts.d
каталог). Любой, кто обращается к серверу напрямую по IP-адресу, я бы хотел, чтобы он получил просто 403 или 404.
Я обнаружил несколько способов установить виртуальный хост по умолчанию / для всех и несколько противоречивых мнений.
Я мог бы создать новый vhost conf в vhosts.d под названием 000aaadefault.conf или что-то в этом роде, но это немного неприятно.
Я мог бы иметь <VirtualHost>
блок в моем основном httpd.conf
перед vhosts.d
каталог включен.
Я мог бы просто указать DocumentRoot
в моем основном httpd.conf
Как насчет указания виртуального хоста по умолчанию в httpd.conf
с участием _default_
http://httpd.apache.org/docs/2.2/vhosts/examples.html#default
Был бы <VirtualHost _default_:*>
блок в моем httpd.conf
до того как я Include vhosts.d/*.conf
быть лучшим способом для всех?
Установка <VirtualHost _default_:*>
ничего не будет делать, он не имеет приоритета над виртуальными хостами, настроенными как <VirtualHost *:80>
(кроме портов, отличных от 80).
_default_
следует использовать только с виртуальным хостингом на основе IP. Из документация:
По умолчанию виртуальный хост никогда не обслуживает запрос, который был отправлен на адрес / порт, который используется для виртуальных хостов на основе имен.
Если вам кажется грязным злоупотреблять алфавитом, чтобы установить значение по умолчанию, возможно, поместите свой виртуальный хост на основе имени по умолчанию в свой основной httpd.conf
, перед Include
линия?
Я мог бы создать новый vhost conf в vhosts.d под названием 000aaadefault.conf или что-то в этом роде, но это немного неприятно.
Однако на самом деле это лучший способ сделать это. Вы хотите, чтобы ваша конфигурация соответствовала вашей конфигурации, поэтому не ставьте ее <VirtualHost>
блок в httpd.conf, а остальные в отдельных файлах. Назовите файл конфигурации для vhost по умолчанию !default.conf
, а затем просто убедитесь, что в vhosts.d
с именами, начинающимися с знаков препинания.