Pesquisa de site

Servindo um conteúdo fora do diretório diferente do diretório DocumentRoot com Apache2


Esta configuração mostrará um exemplo básico de como servir um conteúdo fora de um diretório diferente do diretório DocumentRoot usando o servidor web Apache2. Vamos começar com uma configuração simples de host virtual.


<VirtualHost *:80>

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

<VirtualHost>

A configuração VirtualHost acima servirá um conteúdo do diretório DocumentRoot. Vamos criar uma página básica para confirmar nossas configurações:


# echo "Serving content from /var/www/html" > /var/www/html/index.html

Ao acessar o servidor web disponível obtemos o seguinte conteúdo:


$ curl http://localhost/
Serving content from /var/www/html

O documento HTML fornecido foi carregado do diretório DocumentRoot /var/www/html.

Se quisermos servir também um conteúdo de outro diretório, então o diretório DocumentRoot /var/www/html podemos criar um alias adicional. Aqui está o novo arquivo de configuração VirtualHost que além de /var/www/html também servirá um conteúdo de /opt/www/ usando um Sufixo de alias de URL /opt/


<VirtualHost *:80>

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        Alias   "/opt/" "/opt/www/"

        <Directory "/opt/www/">
                Require all granted
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

<VirtualHost>

Salve sua nova configuração e recarregue o servidor web Apache:


# service apache2 reload
[ ok ] Reloading web server: apache2.

Em seguida, crie uma página simples dentro do diretório alias /opt/www/:


# echo "Serving content from /opt/www/" > /opt/www/index.html

Acessar nosso servidor web usando um sufixo de URL de alias /opt/ servirá um conteúdo do diretório /opt/www:


$ curl http://localhost/opt/
Serving content from /opt/www/

Solução de problemas

O 404 Not Found geralmente significa que você está tentando acessar um conteúdo inexistente ou forneceu uma URL incorreta. Cuidado com um / final em seu URL, pois http://localhost/opt e http://localhost/opt/ são dois nomes distintos URLs. Se você não deseja que seu URL inclua o caractere / final, você precisará remover ambos os caracteres / finais da diretiva Alias acima do seu Configuração do >VirtualHost.

O log de erros AH01630: cliente negado pela configuração do servidor indica acesso negado devido ao controle de acesso configurado incorretamente. Para versões do servidor web Apache abaixo de 2.4, pode ser necessário alterar seu controle de acesso para:


        <Directory "/opt/www/">
                Order allow,deny
                Allow from all
        </Directory>

Artigos relacionados: