Как отключить корень документа по умолчанию в Apache?
Я размещаю некоторые веб-сайты на своем сервере под управлением Apache Httpd. Каждый сайт имеет свой собственный домен или поддомен и виртуальный хост. Поэтому мне не нужен корень документа по умолчанию. Можно ли отключить DocumentRoot
в /etc/httpd/conf/httpd.conf
?
8 ответов
Спасибо за другие ответы. Я решил это, добавив виртуальный хост по умолчанию без каких-либо разрешений. Глобальный DocumentRoot
а также ServerName
параметры должны соответствовать тем, которые указаны в виртуальном хосте.
/etc/httpd/conf/httpd.conf
...
ServerName <server-ip>:80
DocumentRoot "/var/www/html"
<Directory />
Order Deny,Allow
Deny from all
Options None
AllowOverride None
</Directory>
...
/etc/httpd/conf.d/default.conf
<VirtualHost *:80>
ServerName <server-ip>
DocumentRoot /var/www/html
</VirtualHost>
Таким образом, я получаю сообщение 403 Forbidden, когда к серверу обращаются по его ip напрямую, что я и хотел. Было бы еще лучше, если бы я не нуждался /var/www/html
существующий каталог для этого, но Apache жалуется, если я укажу что-то вроде /dev/null
вместо.
И да и нет.
Вы можете закомментировать или удалить DocumentRoot
директива, нет проблем. Но это многого не дает, потому что тогда по умолчанию будет каталог по умолчанию PREFIX/htdocs/
где PREFIX устанавливается при сборке apache.
Когда VirtualHosts настроен, все запросы, которые не обрабатываются явно настроенным виртуальным хостом, обрабатываются виртуальным хостом по умолчанию (который обычно является первым, но httpd -S
скажу тебе).
Любой файл конфигурации Apache с расширением .conf
расположен в /etc/httpd/conf.d/
будет включен как часть конфигурации Apache. Таким образом, чтобы отключить конфигурацию страницы "Welcome" по умолчанию, нам нужно переименовать ее. /etc/httpd/conf.d/welcome.conf:
Шаг один, переместите файл приветствия по умолчанию:
sudo mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.backup
Шаг второй перезагрузите сервис Appache2
sudo systemctl restart httpd
Чтобы отключить эту страницу, мы должны переименовать файл /etc/httpd/conf.d/welcome.conf во что-нибудь другое, или вы можете просто удалить его, если он вам не нужен.
mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf_backup
Убедитесь, что Apache перезапущен (как root) с помощью команды:
systemctl перезапустить httpd
В вашем /etc/httpd/conf/httpd.conf, если ваша директива Listen
Listen 80
Это значит
*:80
Вы определили пару <listener>
+<servename>
в ваших /etc/httpd/conf/httpd.conf и /etc/httpd/conf.d/default.conf, которые совпадают: *:80
+ <server-ip>
, Итак, Apache учитывает только один.
Итак, ваша конфигурация vhost бесполезна.
Вашего /etc/httpd/conf/httpd.conf достаточно, чтобы заблокировать доступ к вашему каталогу /var/www/html.
Просто добавьте:
<Directory /var/www/html>
Order Deny,Allow
Deny from all
Options None
AllowOverride None
</Directory>
Пожалуйста, прочитайте https://httpd.apache.org/docs/2.4/en/vhosts/name-based.html:
Как сервер выбирает правильный виртуальный хост на основе имени
Важно понимать, что первым шагом в разрешении виртуального хоста на основе имени является разрешение на основе IP. Разрешение виртуального хоста на основе имен выбирает наиболее подходящий виртуальный хост на основе имен только после сужения кандидатов до наилучшего соответствия на основе IP. Использование подстановочного знака (*) для IP-адреса во всех директивах VirtualHost делает это сопоставление на основе IP неуместным.
При поступлении запроса сервер найдет наилучший (наиболее конкретный) соответствующий аргумент на основе IP-адреса и порта, используемого запросом. Если существует более одного виртуального хоста, содержащего эту комбинацию адреса и порта с наилучшим соответствием, Apache будет дополнительно сравнивать директивы ServerName и ServerAlias с именем сервера, присутствующим в запросе.
Если вы опустите директиву ServerName для любого виртуального хоста на основе имени, сервер по умолчанию будет использовать полное доменное имя (FQDN), полученное из имени хоста системы. Это неявно установленное имя сервера может привести к нелогичному сопоставлению виртуальных хостов и не рекомендуется.
Vhost на основе имен по умолчанию для комбинации IP-адреса и порта. Если в наборе виртуальных хостов, содержащем наиболее специфическую комбинацию IP-адреса и порта, не найдено подходящего ServerName или ServerAlias, то будет указан первый виртуальный хост, который будет использоваться.
Просто измените порт по умолчанию на:
Listen 80
Listen 8080 # any fake port
и оставьте *.80 в VirtualHost
У меня работает с Apache2 и Centos 7
Больше примеров вы можете найти в документации. Взгляните на переменную _default_.
Чтобы отключить сайт по умолчанию
$ sudo a2dissite 000-default.conf