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