Respostas:
Obrigado pelas outras respostas. Eu o resolvi adicionando um host virtual padrão sem permissões. O global DocumentRoot
e as ServerName
opções devem corresponder aos especificados no host virtual.
/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>
Dessa forma, recebo uma mensagem 403 Proibida quando o servidor é acessado diretamente pelo ip, o que é exatamente o que eu queria. Seria ainda melhor se eu não precisasse de /var/www/html
um diretório existente para isso, mas o Apache reclama se eu especificar algo parecido /dev/null
.
Sim e não.
Você pode comentar ou remover a DocumentRoot
diretiva, não há problema. Mas isso não alcança muito, porque, por padrão, ele será o diretório padrão em PREFIX/htdocs/
que PREFIX é definido quando você cria o apache.
Quando o VirtualHosts configura, todas as solicitações que não são tratadas por um host virtual configurado explicitamente são tratadas pelo host virtual padrão (que normalmente é o primeiro, mas httpd -S
que informa).
Qualquer arquivo de configuração do Apache com extensão .conf
localizada dentro /etc/httpd/conf.d/
será incluído como parte da configuração do Apache. Assim, para desativar a configuração padrão da página "Bem-vindo", precisamos renomear sua configuração/etc/httpd/conf.d/welcome.conf:
Etapa 1: mover o arquivo de boas-vindas padrão:
sudo mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.backup
Etapa 2: reinicie o serviço Appache2
sudo systemctl restart httpd
No seu /etc/httpd/conf/httpd.conf, se a diretiva Listen for
Listen 80
Isso é mau
*:80
Você definiu alguns <listener>
+ <servename>
em seus /etc/httpd/conf/httpd.conf e /etc/httpd/conf.d/default.conf que são os mesmos: *:80
+ <server-ip>
. Portanto, o Apache leva apenas um em consideração.
Portanto, sua configuração do vhost não serve.
Seu /etc/httpd/conf/httpd.conf é suficiente para bloquear o acesso ao seu diretório / var / www / html.
Basta adicionar:
<Directory /var/www/html>
Order Deny,Allow
Deny from all
Options None
AllowOverride None
</Directory>
Leia em https://httpd.apache.org/docs/2.4/en/vhosts/name-based.html#alg :
Como o servidor seleciona o host virtual baseado em nome apropriado
É importante reconhecer que a primeira etapa na resolução de host virtual com base em nome é a resolução com base em IP. A resolução de host virtual com base em nome escolhe apenas o host virtual com base em nome mais apropriado depois de restringir os candidatos à melhor correspondência baseada em IP. O uso de um curinga (*) para o endereço IP em todas as diretivas do VirtualHost torna esse mapeamento baseado em IP irrelevante.
Quando uma solicitação chega, o servidor encontra o melhor argumento de correspondência (mais específico) com base no endereço IP e na porta usados pela solicitação. Se houver mais de um host virtual que contenha essa combinação de melhor porta e endereço, o Apache comparará ainda mais as diretivas ServerName e ServerAlias ao nome do servidor presente na solicitação.
Se você omitir a diretiva ServerName de qualquer host virtual baseado em nome, o servidor usará como padrão um nome de domínio totalmente qualificado (FQDN) derivado do nome do host do sistema. Esse nome do servidor definido implicitamente pode levar a uma correspondência de host virtual contra-intuitiva e é desencorajado.
O vhost baseado em nome padrão para uma combinação de IP e porta Se nenhum ServerName ou ServerAlias correspondente for encontrado no conjunto de hosts virtuais que contêm o endereço IP e a combinação de portas correspondentes mais específicos, o primeiro host virtual listado que corresponda ao que será usado.
Basta alterar a porta padrão para:
Listen 80
Listen 8080 # any fake port
e deixe * .80 no VirtualHost
Funciona para mim com Apache2 e Centos 7
Mais exemplos você pode encontrar na documentação . Dê uma olhada na variável _default_.
Para desativar esta página, precisamos renomear o arquivo /etc/httpd/conf.d/welcome.conf para outra coisa ou você pode simplesmente excluí-lo, se não precisar.
mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf_backup
Certifique-se de que o Apache seja reiniciado (como root) com o comando:
systemctl restart httpd