Como Resolver o Erro 'Nginx 403: directory index of folder is forbidden'

Publicado 27 de agosto de 2024

Problema: Erro 403 do Nginx ao acessar diretório

Ao tentar acessar um diretório em um servidor web rodando Nginx, você pode ver um erro 403 Forbidden. Esse erro indica que o servidor entende sua solicitação, mas não a permitirá. A mensagem "directory index of folder is forbidden" significa que o Nginx está impedindo tentativas de visualizar o conteúdo de um diretório específico. Isso impede que você acesse arquivos ou navegue pela estrutura de pastas.

Soluções para resolver o erro 403 do Nginx

Configurando a indexação de diretórios

Para habilitar a indexação de diretórios no Nginx, modifique o arquivo de configuração do servidor. Adicione a diretiva autoindex on; ao bloco de localização. Isso permite que o Nginx mostre o conteúdo de um diretório quando nenhum arquivo de índice estiver presente.

Defina as permissões corretas para a pasta que você deseja acessar. Use o comando chmod para dar permissões de leitura e execução ao usuário do servidor web:

chmod 755 /caminho/para/seu/diretorio

Ajustando permissões de arquivos

Verifique a propriedade de arquivos e diretórios com o comando ls -l. Se necessário, altere a propriedade usando chown:

chown www-data:www-data /caminho/para/seu/diretorio

Defina as permissões corretas de leitura e execução para arquivos e diretórios. Use chmod:

chmod 644 /caminho/para/seus/arquivos
chmod 755 /caminho/para/seus/diretorios

Atualizando configurações do Nginx

Altere o bloco de localização no arquivo de configuração do servidor para permitir o acesso ao diretório. Adicione ou atualize estas diretivas:

location /seu-diretorio {
    allow all;
}

Adicione ou atualize a diretiva index para especificar quais arquivos o Nginx deve usar como arquivos de índice:

index index.html index.htm index.php;

Isso informa ao Nginx para procurar esses arquivos nessa ordem ao acessar um diretório.

Verificando a solução

Após corrigir o erro 403 Forbidden do Nginx, verifique se a solução funciona. Siga estes passos:

  1. Reinicie o servidor Nginx para aplicar suas alterações. Execute este comando:
sudo systemctl restart nginx

Ou em alguns sistemas:

sudo service nginx restart
  1. Teste o acesso à página web. Abra um navegador e tente acessar o diretório que mostrava o erro 403. Se bem-sucedido, você deverá ver o conteúdo do diretório ou o arquivo de índice, com base na sua configuração.

Se ainda tiver problemas, verifique seus arquivos de configuração em busca de erros. Você também pode consultar os logs de erro do Nginx para obter mais informações sobre quaisquer problemas.

Abordagens alternativas para resolver o erro 403 Forbidden

Criando um arquivo de índice

Adicione um arquivo de índice ao diretório para corrigir o erro 403 Forbidden. Crie um arquivo index.html ou index.php na pasta que deseja acessar. Este arquivo será exibido quando alguém tentar visualizar o conteúdo do diretório.

Para fazer o Nginx usar esses arquivos, adicione ou atualize a diretiva index em seu bloco de servidor:

index index.html index.htm index.php;

Isso informa ao Nginx para procurar esses arquivos ao acessar um diretório.

Usando a diretiva try_files

A diretiva try_files no Nginx ajuda a gerenciar solicitações quando arquivos específicos não são encontrados. Adicione esta diretiva ao seu bloco de localização:

location / {
    try_files $uri $uri/ /index.html;
}

Esta configuração diz ao Nginx para:

  1. Procurar pelo URI solicitado
  2. Verificar se existe um diretório com esse nome
  3. Servir o arquivo index.html se nenhum dos dois existir

Você também pode redirecionar solicitações para uma página padrão se nenhum arquivo correspondente for encontrado:

location / {
    try_files $uri $uri/ /padrao.html;
}

Esta abordagem ajuda a corrigir erros 403 fornecendo uma opção de fallback quando o recurso solicitado não está disponível.

Solucionando erros 403 persistentes

Se você tentou as soluções anteriores e ainda enfrenta um erro 403 Forbidden, tente estas etapas:

Verificando configurações do SELinux

Em sistemas que usam SELinux, configurações incorretas podem causar erros 403. Para verificar se o SELinux está ativo, execute:

getenforce

Se mostrar "Enforcing", o SELinux pode estar bloqueando o acesso. Para permitir que o Nginx acesse o diretório, use este comando:

chcon -Rt httpd_sys_content_t /caminho/para/seu/diretorio

Para desativar o SELinux temporariamente para testes, execute:

sudo setenforce 0

Lembre-se de reativá-lo após os testes.

Verificando permissões do usuário do Nginx

Verifique com qual usuário o Nginx está sendo executado olhando no arquivo de configuração do Nginx (geralmente /etc/nginx/nginx.conf). Procure por uma linha como:

user nginx;

Certifique-se de que este usuário tenha as permissões corretas para acessar seu diretório web. Você pode alterar a propriedade do diretório para o usuário do Nginx:

chown -R nginx:nginx /caminho/para/seu/diretorio

Se essas etapas não resolverem o problema, revise os logs de erro do Nginx para obter mais detalhes sobre o erro 403. Os logs geralmente estão em /var/log/nginx/error.log.