Como desativar a raiz do documento padrão no Apache?

13

Eu hospedo alguns sites no meu servidor executando o Apache Httpd. Cada site tem seu próprio domínio ou subdomínio e host virtual. Portanto, não preciso de raiz de documento padrão. É possível desativar DocumentRootem /etc/httpd/conf/httpd.conf?

danijar
fonte

Respostas:

10

Obrigado pelas outras respostas. Eu o resolvi adicionando um host virtual padrão sem permissões. O global DocumentRoote as ServerNameopçõ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/htmlum diretório existente para isso, mas o Apache reclama se eu especificar algo parecido /dev/null.

danijar
fonte
6

Não tenho certeza se você quer fazer isso. Se não houver vhost padrão em uma configuração do apache, o primeiro vhost definido se tornará o padrão .

Tudo o que você realmente precisa fazer é que o padrão sirva uma página em branco.

user9517
fonte
6

Sim e não.

Você pode comentar ou remover a DocumentRootdiretiva, 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 -Sque informa).

HBruijn
fonte
1

Qualquer arquivo de configuração do Apache com extensão .conflocalizada 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
Usman Ali Maan
fonte
0

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.

Jordan LE NUFF
fonte
0

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_.

Vasin Yuriy
fonte
0

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

Sukhjinder Singh
fonte