Назад | Перейти на главную страницу

Как отключить корень документа по умолчанию в Apache?

Я размещаю на своем сервере несколько веб-сайтов с Apache Httpd. У каждого веб-сайта есть собственный домен или субдомен и виртуальный хост. Следовательно, мне не нужен корень документа по умолчанию. Можно ли отключить DocumentRoot в /etc/httpd/conf/httpd.conf?

Спасибо за другие ответы. Я решил это, добавив виртуальный хост по умолчанию без каких-либо разрешений. Глобальный 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 нет виртуального хоста по умолчанию, первый определенный виртуальный хост становится дефолт.

Все, что вам действительно нужно, - это настроить по умолчанию пустую страницу.

Любой файл конфигурации Apache с расширением .conf расположен внутри /etc/httpd/conf.d/ будет включен как часть конфигурации Apache. Таким образом, чтобы отключить конфигурацию страницы приветствия по умолчанию, нам нужно переименовать ее конфигурацию. /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/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#alg :

Как сервер выбирает правильный виртуальный хост на основе имени

Важно понимать, что первым шагом в разрешении виртуальных хостов на основе имен является разрешение на основе IP. Разрешение виртуального хоста на основе имени выбирает только наиболее подходящий виртуальный хост на основе имени после сужения числа кандидатов до наилучшего соответствия на основе IP. Использование подстановочного знака (*) для IP-адреса во всех директивах VirtualHost делает это сопоставление на основе IP несущественным.

Когда поступает запрос, сервер найдет наиболее подходящий (наиболее точный) аргумент на основе IP-адреса и порта, используемых запросом. Если существует более одного виртуального хоста, содержащего эту наиболее подходящую комбинацию адреса и порта, Apache будет далее сравнивать директивы ServerName и ServerAlias ​​с именем сервера, указанным в запросе.

Если вы опустите директиву ServerName для любого виртуального хоста на основе имени, сервер по умолчанию будет использовать полное доменное имя (FQDN), полученное из имени хоста системы. Это неявно установленное имя сервера может привести к нелогичному сопоставлению виртуальных хостов и не рекомендуется.

Виртуальный хост на основе имени по умолчанию для комбинации IP-адреса и порта. Если совпадение ServerName или ServerAlias ​​не найдено в наборе виртуальных хостов, содержащих наиболее конкретную совпадающую комбинацию IP-адреса и порта, то будет использован первый из перечисленных виртуальных хостов, который соответствует этому.

Просто измените порт по умолчанию на:

Listen 80
Listen 8080 # any fake port

и оставьте * .80 в VirtualHost

У меня работает с Apache2 и Centos 7

Больше примеров вы можете найти в документация. Взгляните на переменную _default_.

Чтобы отключить эту страницу, мы должны переименовать файл /etc/httpd/conf.d/welcome.conf во что-нибудь другое, или вы можете просто удалить его, если он вам не нужен.

mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf_backup

Убедитесь, что Apache перезапущен (как root) с помощью команды:

systemctl перезапустить httpd