Ubuntu 16.04 / Apache / Como Corrigir o Acesso à Pasta javascript
Se um 403 Forbidden aparecer ao acessar /javascript/ no Apache no Ubuntu, verifique se o alias do Apache criado pelo pacote javascript-common entra em conflito com o caminho do site. No entanto, erros 403 também podem ocorrer devido a permissões ou configurações de listagem de diretório, então você deve verificar a resposta real do arquivo e as configurações do servidor juntas antes de tomar qualquer ação.
Coisas para Verificar Primeiro
Este artigo é baseado em um ambiente usando Apache 2.4 no Ubuntu. O artigo original abordava o Ubuntu 16.04 LTS, que é uma versão antiga cujo suporte padrão e suporte geral do Ubuntu Pro foram encerrados. Verifique as condições para suporte adicional legado e planeje migrar para uma versão suportada. O cronograma de suporte pode ser verificado em Cronograma de Manutenção de Segurança do Ubuntu.
O problema de ver um erro 403 ao abrir apenas o endereço da pasta /javascript/ em um navegador e de não conseguir carregar os arquivos JavaScript dentro dela são problemas diferentes. Se não houver um arquivo index padrão no diretório e a listagem de diretórios estiver desativada, o endereço da pasta pode retornar 403, mas arquivos individuais ainda podem ser servidos normalmente.
Verifique a URL e o código de status do arquivo que realmente falhou na aba Rede (Network) das ferramentas de desenvolvedor do navegador. Por exemplo, verifique se /javascript/app.js referenciado pelo site retorna 200, 403 ou 404, e também inspecione o conteúdo da resposta. Mesmo que mostre 200, pode ser retornado um conteúdo diferente do arquivo JavaScript pretendido.
O que é um conflito de alias?
Em alguns ambientes Ubuntu e Debian, a configuração ativa de javascript-common pode incluir aliases como os seguintes. Quando essa configuração é aplicada, o caminho da URL /javascript pode apontar para um diretório diferente daquele sob a raiz de documentos do site.
Alias /javascript /usr/share/javascript/
Por exemplo, se o Apache procura pelo /javascript/app.js solicitado em /usr/share/javascript/, arquivos na pasta original do site podem não ser servidos. Se o arquivo de destino não existir, pode aparecer um erro 404, e se o acesso ao destino for negado ou a listagem de diretórios não for permitida, pode aparecer um erro 403. Não conclua um conflito de alias apenas com base no código de status.
Este alias está relacionado a solicitações em que o primeiro segmento do caminho da URL é /javascript. Nem todas as pastas javascript sob outros segmentos, como /assets/javascript/app.js, correspondem automaticamente a esse alias. O mapeamento real e a prioridade podem variar dependendo de hosts virtuais, outros aliases, redirecionamentos e regras de reescrita. Você pode verificar a correspondência de caminho e a ordem de processamento na documentação do Apache Alias.
Verifique as configurações ativas e os logs de erro
Conecte-se ao servidor para verificar a versão do Apache e os hosts virtuais. As seguintes pesquisas encontram strings relevantes nos diretórios de configuração, e configurações não utilizadas também podem aparecer nos resultados.
apache2 -v
sudo apache2ctl -S
sudo grep -R -n -i javascript /etc/apache2
Se /etc/apache2/conf-available/javascript-common.conf aparecer nos resultados, verifique seu conteúdo e confirme se ele está realmente ativado e vinculado ao /etc/apache2/conf-enabled/. Além disso, revise as configurações específicas do host virtual e outras regras de URL. Se o arquivo estiver ausente ou o alias estiver desabilitado, não presuma que esta configuração seja a causa.
ls -l /etc/apache2/conf-enabled/javascript-common.conf
sudo cat /etc/apache2/conf-available/javascript-common.conf
Se você receber uma mensagem de que o arquivo ou link simbólico não existe, então a instalação ou o estado ativo é diferente. Verifique os registros de erros do Apache no momento da solicitação para ver o caminho real e os erros encontrados. Na configuração padrão do Ubuntu, /var/log/apache2/error.log pode estar disponível, mas os caminhos dos logs podem diferir para cada host virtual.
sudo tail -n 50 /var/log/apache2/error.log
Escolha um Método de Resolução
Se for possível alterar o caminho do arquivo no site, use um caminho como /assets/js/ que não se sobreponha ao alias, e também modifique o endereço HTML script e as configurações de build. Se houver páginas, caches ou links externos usando o endereço existente, verifique o impacto da mudança e solicite novamente os arquivos reais após a implantação. Simplesmente renomear a pasta mantendo as referências inalteradas fará com que as páginas existentes não consigam localizar o arquivo.
Se você precisar manter o endereço existente /javascript, o administrador do servidor pode revisar as dependências de todos os hosts virtuais e pacotes antes de alterar ou desativar o alias. Desabilitar a configuração javascript-common também pode alterar endereços usados por outros sites ou pacotes, portanto, primeiro investigue o impacto e prepare medidas de recuperação. Editar diretamente o arquivo de configuração do pacote pode tornar a gestão mais complicada durante as atualizações do pacote.
As seguintes são opções quando você confirmou que a configuração está habilitada e não é usada por outros serviços. Este comando pode afetar toda a configuração do Apache no servidor. Se a verificação de sintaxe falhar após a execução, não recarregue; resolva a causa ou reative a configuração primeiro.
sudo a2disconf javascript-common
sudo apache2ctl configtest
Recarregue a configuração apenas se a verificação de sintaxe confirmar Syntax OK. O nome do serviço pode variar dependendo do ambiente.
sudo systemctl reload apache2
Para reverter, reative a configuração com os seguintes comandos e recarregue apenas quando a verificação de sintaxe for bem-sucedida.
sudo a2enconf javascript-common
sudo apache2ctl configtest && sudo systemctl reload apache2
Verifique após alterações e outras causas
Solicite novamente o URL exato do arquivo que falhou antes da alteração e verifique o código de status e o conteúdo do arquivo. Limpe o cache do seu navegador ou configure suas ferramentas de desenvolvedor para não usar o cache, depois verifique as requisições de rede e erros de console na página. Além disso, inspecione outros sites ou pacotes que utilizavam o caminho /javascript existente.
Se o alias não for a causa ou o erro 403 continuar após a alteração, verifique as regras de acesso Directory·Location do Apache, permissões de leitura de arquivos e de diretórios pai, configurações de links simbólicos e arquivos de índice padrão e políticas de listagem de diretórios. Não permita o acesso a todos de forma aleatória ou habilite a listagem de diretórios para remover o erro, pois isso poderia expor arquivos que você não pretende tornar públicos; em vez disso, primeiro verifique os arquivos e políticas realmente necessários.




