Como corrigir o erro "Stat() Failed (13: Permission Denied)" no Nginx?

Publicado 13 de outubro de 2024

Problema: Erro de Permissão Negada no Nginx

O erro "Stat() Failed (13: Permission Denied)" no Nginx ocorre quando o servidor web não tem as permissões corretas para acessar arquivos ou diretórios. Esse problema pode impedir o Nginx de servir conteúdo ou executar scripts, causando indisponibilidade do site ou problemas em seu funcionamento.

Resolvendo o Erro de Permissão Negada

Ajustando a propriedade de arquivos e diretórios

Para corrigir o erro de Permissão Negada, ajuste a propriedade dos arquivos e diretórios. Use o comando chown para alterar o proprietário dos arquivos e diretórios para o usuário do Nginx, geralmente www-data. Por exemplo:

sudo chown www-data:www-data /username/test/static

Para aplicar as mudanças de propriedade a todos os arquivos e subdiretórios, adicione a opção -R:

sudo chown -R www-data:www-data /username/test/static

Dica: Verificar mudanças de propriedade

Após alterar a propriedade, use o comando 'ls -l' para verificar se as mudanças foram aplicadas corretamente:

ls -l /username/test/static

Isso exibirá as permissões, o proprietário e as informações de grupo dos arquivos e diretórios.

Modificando as permissões dos diretórios

Modifique as permissões dos diretórios usando o comando chmod. Defina os valores corretos para permitir que o Nginx acesse os arquivos. Uma configuração comum de permissão é 755, que dá permissões de leitura, escrita e execução ao proprietário, e permissões de leitura e execução aos outros:

sudo chmod 755 /username/test/static

Defina o acesso adequado ao longo de todo o caminho do diretório. Cada diretório pai deve ter pelo menos permissão de execução para o usuário do Nginx:

sudo chmod 755 /username
sudo chmod 755 /username/test

Adicionando o usuário do Nginx ao grupo necessário

Se mudar a propriedade e as permissões não funcionar, adicione o usuário do Nginx ao grupo necessário. Use o comando gpasswd para adicionar o usuário www-data ao grupo que é dono do diretório:

sudo gpasswd -a www-data username

Depois de adicionar o usuário do Nginx ao grupo, atualize as permissões de grupo para acesso ao diretório:

sudo chmod g+x /username
sudo chmod g+x /username/test
sudo chmod g+x /username/test/static

Isso dá ao grupo permissão de execução em cada diretório no caminho, permitindo que o Nginx acesse os arquivos.

Testando e Verificando a Solução

Executando o Nginx como o usuário apropriado

Para testar se o Nginx pode acessar os arquivos com as novas permissões, execute um comando como o usuário do Nginx. Use sudo para mudar para o usuário www-data e tente acessar os arquivos:

sudo -u www-data stat /username/test/static/index.html

Se este comando for executado sem erros, o Nginx agora pode acessar os arquivos. Se você ver um erro de "Permission denied", revise os passos anteriores e certifique-se de que todas as permissões estão definidas corretamente.

Dica: Verificar Propriedade do Arquivo

Para verificar rapidamente se a propriedade do arquivo está configurada corretamente, use o comando ls -l:

ls -l /username/test/static/index.html

Isso exibirá o proprietário e o grupo do arquivo. Certifique-se de que eles correspondam ao usuário do Nginx (geralmente www-data).

Recarregando a configuração do Nginx

Após alterar as permissões ou a propriedade, recarregue a configuração do Nginx para aplicar as mudanças:

sudo systemctl reload nginx

Este comando reinicia o serviço Nginx sem interromper as conexões ativas.

Para verificar se o erro foi resolvido, olhe os logs de erro do Nginx:

sudo tail -f /var/log/nginx/error.log

Se você não vir os erros de "Permission denied" no log, o problema está resolvido. Seu servidor Nginx agora deve servir os arquivos estáticos do diretório especificado.