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

13

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

Данияр
источник

Ответы:

10

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

Данияр
источник
6

Я не уверен, что вы хотите это сделать. Если в конфигурации apache отсутствует vhost по умолчанию, первый определенный vhost становится значением по умолчанию .

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

user9517
источник
6

Да и нет.

Вы можете закомментировать или удалить DocumentRootдирективу, без проблем. Но это многого не дает, потому что тогда по умолчанию будет установлен каталог по умолчанию, в PREFIX/htdocs/котором установлен PREFIX при сборке apache.

Когда у вас есть VirtualHosts, установите все запросы, которые не обрабатываются явно настроенным виртуальным хостом, обрабатываются виртуальным хостом по умолчанию (который обычно является первым, но httpd -Sсообщит вам).

HBruijn
источник
1

Любой файл конфигурации 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
Усман Али Маан
источник
0

В вашем /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), полученное из имени хоста системы. Это неявно установленное имя сервера может привести к нелогичному сопоставлению виртуального хоста и не рекомендуется.

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

Иордания LE NUFF
источник
0

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

Listen 80
Listen 8080 # any fake port

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

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

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

Васин Юрий
источник
0

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

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

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

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

Сукхиндер Сингх
источник