{"id":17028,"date":"2026-07-31T09:26:28","date_gmt":"2026-07-31T12:26:28","guid":{"rendered":"https:\/\/www.homehost.com.br\/blog\/?p=17028"},"modified":"2026-07-31T09:30:06","modified_gmt":"2026-07-31T12:30:06","slug":"403-forbidden-nginx","status":"publish","type":"post","link":"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/","title":{"rendered":"403 Forbidden no Nginx: causas e como resolver"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>O erro 403 Forbidden no Nginx tem tr\u00eas causas dominantes: a diretiva <code>try_files<\/code> ausente ou incorreta, permiss\u00f5es que impedem o processo do Nginx de ler os arquivos, e \u2014 em servidores CentOS, AlmaLinux ou Rocky \u2014 o SELinux bloqueando o acesso ao diret\u00f3rio. O que praticamente nunca \u00e9 a causa: o <code>.htaccess<\/code>, porque o Nginx simplesmente n\u00e3o l\u00ea esse arquivo.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Essa \u00faltima diferen\u00e7a \u00e9 o que mais confunde quem vem do Apache. Boa parte dos tutoriais de erro 403 manda renomear o <code><a href=\"https:\/\/www.homehost.com.br\/blog\/internet\/htaccess-aprenda-tudo-sobre-esse-arquivo\/\">.htaccess<\/a><\/code> \u2014 no Nginx, isso n\u00e3o muda absolutamente nada. Este guia cobre o diagn\u00f3stico espec\u00edfico do Nginx, do log at\u00e9 a configura\u00e7\u00e3o.<\/p>\n\n\n\n<div style=\"border:1px solid #c7dcfa; border-left:4px solid #1a73e8; background:#f2f7fe; border-radius:8px; padding:18px 22px; margin:24px 0; font-family:Arial, Helvetica, sans-serif;\">\n<div style=\"font-weight:700; color:#0b3d91; margin-bottom:6px; text-transform:uppercase; letter-spacing:.05em; font-size:14px;\">Resposta r\u00e1pida<\/div>\n<p style=\"color:#0b3d91; line-height:1.65; margin:0 0 10px;\">Comece pelo log \u2014 ele diz a causa em uma linha:<\/p>\n<p style=\"color:#0b3d91; line-height:1.65; margin:0 0 10px; font-family:'Courier New', monospace; font-size:13.5px;\">sudo tail -30 \/var\/log\/nginx\/error.log<\/p>\n<table style=\"width:100%; border-collapse:collapse; margin-top:4px; font-size:14px; color:#0b3d91;\">\n<tr><td style=\"padding:5px 8px; vertical-align:top;\"><strong>directory index of &#8230; is forbidden<\/strong><\/td><td style=\"padding:5px 8px;\">Falta <code>try_files<\/code> ou arquivo \u00edndice<\/td><\/tr>\n<tr><td style=\"padding:5px 8px; vertical-align:top;\"><strong>Permission denied<\/strong><\/td><td style=\"padding:5px 8px;\">Permiss\u00f5es de arquivo ou pasta<\/td><\/tr>\n<tr><td style=\"padding:5px 8px; vertical-align:top;\"><strong>access forbidden by rule<\/strong><\/td><td style=\"padding:5px 8px;\">Uma diretiva <code>deny<\/code> na configura\u00e7\u00e3o<\/td><\/tr>\n<tr><td style=\"padding:5px 8px; vertical-align:top;\"><strong>Nada no log do Nginx<\/strong><\/td><td style=\"padding:5px 8px;\">Provavelmente SELinux \u2014 veja o log de auditoria<\/td><\/tr>\n<\/table>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><div id=\"ez-toc-container\" class=\"ez-toc-v2_0_72 ez-toc-wrap-center counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Conte\u00fado<\/p>\n<span class=\"ez-toc-title-toggle\"><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/#Por_que_o_Nginx_e_diferente_do_Apache_aqui\" title=\"Por que o Nginx \u00e9 diferente do Apache aqui\">Por que o Nginx \u00e9 diferente do Apache aqui<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/#Comece_pelo_log\" title=\"Comece pelo log\">Comece pelo log<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/#Causa_1_try_files_ausente_ou_incorreto\" title=\"Causa 1: try_files ausente ou incorreto\">Causa 1: try_files ausente ou incorreto<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/#Causa_2_permissoes_e_o_usuario_do_Nginx\" title=\"Causa 2: permiss\u00f5es e o usu\u00e1rio do Nginx\">Causa 2: permiss\u00f5es e o usu\u00e1rio do Nginx<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/#Causa_3_SELinux_%E2%80%94_a_causa_que_nao_aparece_no_log_do_Nginx\" title=\"Causa 3: SELinux \u2014 a causa que n\u00e3o aparece no log do Nginx\">Causa 3: SELinux \u2014 a causa que n\u00e3o aparece no log do Nginx<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/#Causa_4_diretivas_deny_na_configuracao\" title=\"Causa 4: diretivas deny na configura\u00e7\u00e3o\">Causa 4: diretivas deny na configura\u00e7\u00e3o<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/#Causa_5_o_erro_so_em_arquivos_estaticos_ou_so_no_PHP\" title=\"Causa 5: o erro s\u00f3 em arquivos est\u00e1ticos ou s\u00f3 no PHP\">Causa 5: o erro s\u00f3 em arquivos est\u00e1ticos ou s\u00f3 no PHP<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/#Nginx_como_proxy_do_Apache\" title=\"Nginx como proxy do Apache\">Nginx como proxy do Apache<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/#Depois_de_qualquer_alteracao\" title=\"Depois de qualquer altera\u00e7\u00e3o\">Depois de qualquer altera\u00e7\u00e3o<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/#Perguntas_frequentes\" title=\"Perguntas frequentes\">Perguntas frequentes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/#Veja_tambem\" title=\"Veja tamb\u00e9m\">Veja tamb\u00e9m<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/#Conclusao\" title=\"Conclus\u00e3o\">Conclus\u00e3o<\/a><\/li><\/ul><\/nav><\/div>\n<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Por_que_o_Nginx_e_diferente_do_Apache_aqui\"><\/span>Por que o Nginx \u00e9 diferente do Apache aqui<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Vale come\u00e7ar por isso, porque poupa horas: <strong>o Nginx n\u00e3o usa <code>.htaccess<\/code><\/strong>. N\u00e3o existe arquivo de configura\u00e7\u00e3o por diret\u00f3rio. Toda a configura\u00e7\u00e3o fica centralizada, normalmente em <code>\/etc\/nginx\/nginx.conf<\/code> e nos arquivos dentro de <code>\/etc\/nginx\/sites-available\/<\/code> ou <code>\/etc\/nginx\/conf.d\/<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Isso significa que:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Renomear ou apagar o <code>.htaccess<\/code> n\u00e3o tem efeito nenhum.<\/strong> Se o arquivo existir na pasta do site, o Nginx simplesmente o ignora \u2014 ele \u00e9 apenas um arquivo comum ali.<\/li>\n\n\n\n<li>Regras de bloqueio que voc\u00ea procuraria no <code>.htaccess<\/code> est\u00e3o nos blocos <code>server<\/code> e <code>location<\/code> da configura\u00e7\u00e3o.<\/li>\n\n\n\n<li>Qualquer altera\u00e7\u00e3o exige <strong>recarregar o Nginx<\/strong> para valer, ao contr\u00e1rio do Apache, que l\u00ea o <code>.htaccess<\/code> a cada requisi\u00e7\u00e3o.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">E h\u00e1 um detalhe que confunde muita gente na p\u00e1gina de erro:<\/p>\n\n\n\n<div style=\"border:1px solid #c7dcfa; border-left:4px solid #1a73e8; background:#f2f7fe; border-radius:8px; padding:18px 22px; margin:24px 0; font-family:Arial, Helvetica, sans-serif;\">\n<div style=\"font-weight:700; color:#0b3d91; margin-bottom:6px; font-size:15px;\">&#x1f4a1; O n\u00famero embaixo da mensagem \u00e9 a vers\u00e3o, n\u00e3o a causa<\/div>\n<p style=\"color:#0b3d91; line-height:1.65; margin:0;\">A p\u00e1gina de erro do Nginx costuma mostrar algo como <strong>nginx\/1.18.0 (Ubuntu)<\/strong> logo abaixo do &#8220;403 Forbidden&#8221;. Esse n\u00famero \u00e9 apenas a vers\u00e3o do servidor \u2014 ele n\u00e3o tem rela\u00e7\u00e3o com o motivo do bloqueio. Pesquisar pela vers\u00e3o n\u00e3o ajuda: a causa e a solu\u00e7\u00e3o s\u00e3o as mesmas em todas elas.<\/p>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Comece_pelo_log\"><\/span>Comece pelo log<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">O log do Nginx diz a causa direto, e economiza todo o processo de tentativa e erro:<\/p>\n\n\n\n<div style=\"background:#0b3d91; border-radius:8px; padding:16px 18px; margin:18px 0; font-family:'Courier New', Courier, monospace; overflow-x:auto;\">\n<code style=\"color:#f1f5f9; font-size:13.5px; line-height:1.8;\">\n# \u00daltimas entradas do log de erro<br>\nsudo tail -30 \/var\/log\/nginx\/error.log<br>\n<br>\n# Filtrar s\u00f3 o que interessa<br>\nsudo grep -i \"forbidden\\|permission denied\" \/var\/log\/nginx\/error.log | tail -20<br>\n<br>\n# Acompanhar em tempo real enquanto testa<br>\nsudo tail -f \/var\/log\/nginx\/error.log\n<\/code>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Deixe o <code>tail -f<\/code> rodando e recarregue a p\u00e1gina no navegador \u2014 a linha que aparecer no momento do erro \u00e9 a sua resposta. As mensagens mais comuns e o que cada uma indica:<\/p>\n\n\n\n<div style=\"overflow-x:auto; margin:24px 0;\">\n<table style=\"width:100%; border-collapse:collapse; font-family:Arial, Helvetica, sans-serif; font-size:14.5px; min-width:620px;\">\n<thead>\n<tr style=\"background-color:#1a73e8; color:#ffffff; text-align:left;\">\n<th style=\"padding:12px 14px; border:1px solid #1a73e8;\">Mensagem no log<\/th>\n<th style=\"padding:12px 14px; border:1px solid #1a73e8;\">Causa<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"background-color:#f7fafd;\">\n<td style=\"padding:11px 14px; border:1px solid #dde6ef;\"><code>directory index of \"\/var\/www\/...\" is forbidden<\/code><\/td>\n<td style=\"padding:11px 14px; border:1px solid #dde6ef;\">N\u00e3o h\u00e1 arquivo \u00edndice e a listagem de diret\u00f3rio est\u00e1 desativada. Falta <code>try_files<\/code> ou <code>index<\/code><\/td>\n<\/tr>\n<tr style=\"background-color:#ffffff;\">\n<td style=\"padding:11px 14px; border:1px solid #dde6ef;\"><code>open() \"\/var\/www\/...\" failed (13: Permission denied)<\/code><\/td>\n<td style=\"padding:11px 14px; border:1px solid #dde6ef;\">O usu\u00e1rio do Nginx n\u00e3o consegue ler o arquivo ou atravessar a pasta<\/td>\n<\/tr>\n<tr style=\"background-color:#f7fafd;\">\n<td style=\"padding:11px 14px; border:1px solid #dde6ef;\"><code>access forbidden by rule<\/code><\/td>\n<td style=\"padding:11px 14px; border:1px solid #dde6ef;\">Uma diretiva <code>deny<\/code> est\u00e1 bloqueando aquele IP ou caminho<\/td>\n<\/tr>\n<tr style=\"background-color:#ffffff;\">\n<td style=\"padding:11px 14px; border:1px solid #dde6ef;\">O log n\u00e3o registra nada<\/td>\n<td style=\"padding:11px 14px; border:1px solid #dde6ef;\">O bloqueio veio de fora do Nginx: SELinux, firewall ou CDN<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Causa_1_try_files_ausente_ou_incorreto\"><\/span>Causa 1: try_files ausente ou incorreto<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A causa mais comum, e a que gera a mensagem <code>directory index ... is forbidden<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quando o Nginx recebe uma URL que n\u00e3o corresponde a um arquivo existente, ele precisa saber o que fazer. Sem a diretiva <code>try_files<\/code>, ele tenta listar o conte\u00fado da pasta \u2014 e como a listagem vem desativada por padr\u00e3o, o resultado \u00e9 403.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Para WordPress e a maioria dos CMS:<\/strong><\/p>\n\n\n\n<div style=\"background:#0b3d91; border-radius:8px; padding:16px 18px; margin:18px 0; font-family:'Courier New', Courier, monospace; overflow-x:auto;\">\n<code style=\"color:#f1f5f9; font-size:13.5px; line-height:1.8;\">\nlocation \/ {<br>\n&nbsp;&nbsp;&nbsp;&nbsp;try_files $uri $uri\/ \/index.php?$args;<br>\n}\n<\/code>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Para sites est\u00e1ticos:<\/strong><\/p>\n\n\n\n<div style=\"background:#0b3d91; border-radius:8px; padding:16px 18px; margin:18px 0; font-family:'Courier New', Courier, monospace; overflow-x:auto;\">\n<code style=\"color:#f1f5f9; font-size:13.5px; line-height:1.8;\">\nlocation \/ {<br>\n&nbsp;&nbsp;&nbsp;&nbsp;try_files $uri $uri\/ =404;<br>\n}\n<\/code>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Confirme tamb\u00e9m que os arquivos \u00edndice est\u00e3o declarados no bloco <code><strong>server<\/strong><\/code>:<\/p>\n\n\n\n<div style=\"background:#0b3d91; border-radius:8px; padding:16px 18px; margin:18px 0; font-family:'Courier New', Courier, monospace; overflow-x:auto;\">\n<code style=\"color:#f1f5f9; font-size:13.5px; line-height:1.8;\">\nindex index.php index.html index.htm;\n<\/code>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">E verifique que o arquivo \u00edndice <strong>existe de fato<\/strong> na raiz definida pela diretiva <code>root<\/code>. Parece \u00f3bvio, mas depois de uma migra\u00e7\u00e3o \u00e9 comum a raiz apontar para uma pasta acima ou abaixo da correta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Sobre o <code>autoindex<\/code>:<\/strong> voc\u00ea pode ativar a listagem de diret\u00f3rio com <code>autoindex on;<\/code>, o que faz o 403 virar uma lista de arquivos. <strong>N\u00e3o fa\u00e7a isso para resolver o erro<\/strong> \u2014 expor o conte\u00fado das pastas \u00e9 risco de seguran\u00e7a. Use s\u00f3 em diret\u00f3rios de download onde a listagem \u00e9 intencional.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Causa_2_permissoes_e_o_usuario_do_Nginx\"><\/span>Causa 2: permiss\u00f5es e o usu\u00e1rio do Nginx<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A mensagem <code>Permission denied<\/code> no log aponta para c\u00e1.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O Nginx roda sob um usu\u00e1rio pr\u00f3prio \u2014 <strong><code>www-data<\/code><\/strong> no Debian e Ubuntu, <strong><code>nginx<\/code><\/strong> no CentOS, AlmaLinux e Rocky. Confirme qual \u00e9 o seu:<\/p>\n\n\n\n<div style=\"background:#0b3d91; border-radius:8px; padding:16px 18px; margin:18px 0; font-family:'Courier New', Courier, monospace; overflow-x:auto;\">\n<code style=\"color:#f1f5f9; font-size:13.5px; line-height:1.8;\">\ngrep \"^user\" \/etc\/nginx\/nginx.conf\n<\/code>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Esse usu\u00e1rio precisa de <strong>leitura nos arquivos<\/strong> e <strong>execu\u00e7\u00e3o nas pastas<\/strong> \u2014 inclusive em todas as pastas do caminho at\u00e9 chegar ao site. \u00c9 aqui que muita gente erra: as permiss\u00f5es da pasta do site est\u00e3o certas, mas uma pasta acima na hierarquia bloqueia a passagem.<\/p>\n\n\n\n<div style=\"background:#0b3d91; border-radius:8px; padding:16px 18px; margin:18px 0; font-family:'Courier New', Courier, monospace; overflow-x:auto;\">\n<code style=\"color:#f1f5f9; font-size:13.5px; line-height:1.8;\">\n# Testar se o usu\u00e1rio do Nginx consegue chegar ao arquivo<br>\nsudo -u www-data stat \/var\/www\/seusite\/index.php<br>\n<br>\n# Corrigir permiss\u00f5es em massa<br>\nsudo find \/var\/www\/seusite -type d -exec chmod 755 {} \\;<br>\nsudo find \/var\/www\/seusite -type f -exec chmod 644 {} \\;<br>\n<br>\n# Ajustar o dono<br>\nsudo chown -R www-data:www-data \/var\/www\/seusite\n<\/code>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">O comando <code>sudo -u www-data stat<\/code> \u00e9 o teste definitivo: se ele falhar com &#8220;Permission denied&#8221;, o problema \u00e9 permiss\u00e3o em algum ponto do caminho \u2014 e a mensagem indica onde.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Nunca use 777<\/strong> para resolver. Al\u00e9m do risco de seguran\u00e7a, o pr\u00f3prio PHP-FPM costuma recusar executar arquivos com permiss\u00e3o de escrita para todos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Causa_3_SELinux_%E2%80%94_a_causa_que_nao_aparece_no_log_do_Nginx\"><\/span>Causa 3: SELinux \u2014 a causa que n\u00e3o aparece no log do Nginx<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Esta \u00e9 a que mais consome tempo, porque <strong>o log do Nginx n\u00e3o registra nada de anormal<\/strong>. Voc\u00ea v\u00ea 403 no navegador, as permiss\u00f5es est\u00e3o corretas, o <code>try_files<\/code> est\u00e1 certo \u2014 e o log fica em sil\u00eancio.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O SELinux vem ativo por padr\u00e3o em <strong>CentOS, AlmaLinux, Rocky Linux e Fedora<\/strong>, e bloqueia o Nginx de acessar diret\u00f3rios fora dos caminhos que ele considera leg\u00edtimos. Se voc\u00ea colocou o site em <code>\/home\/usuario\/site<\/code> ou em qualquer lugar fora de <code>\/usr\/share\/nginx\/html<\/code>, \u00e9 bem prov\u00e1vel que seja isso.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Como confirmar:<\/strong><\/p>\n\n\n\n<div style=\"background:#0b3d91; border-radius:8px; padding:16px 18px; margin:18px 0; font-family:'Courier New', Courier, monospace; overflow-x:auto;\">\n<code style=\"color:#f1f5f9; font-size:13.5px; line-height:1.8;\">\n# O SELinux est\u00e1 ativo?<br>\ngetenforce<br>\n<br>\n# Procurar bloqueios recentes no log de auditoria<br>\nsudo grep nginx \/var\/log\/audit\/audit.log | tail -20\n<\/code>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Se <strong><code>getenforce<\/code> <\/strong>retornar <strong>Enforcing<\/strong> e houver entradas com <code>denied<\/code> no audit.log, \u00e9 o SELinux.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A solu\u00e7\u00e3o correta<\/strong> \u00e9 ajustar o contexto do diret\u00f3rio, n\u00e3o desativar o SELinux:<\/p>\n\n\n\n<div style=\"background:#0b3d91; border-radius:8px; padding:16px 18px; margin:18px 0; font-family:'Courier New', Courier, monospace; overflow-x:auto;\">\n<code style=\"color:#f1f5f9; font-size:13.5px; line-height:1.8;\">\n# Marcar o diret\u00f3rio como conte\u00fado web<br>\nsudo semanage fcontext -a -t httpd_sys_content_t \"\/caminho\/do\/site(\/.*)?\"<br>\nsudo restorecon -Rv \/caminho\/do\/site<br>\n<br>\n# Se o site precisa gravar arquivos (uploads do WordPress)<br>\nsudo semanage fcontext -a -t httpd_sys_rw_content_t \"\/caminho\/do\/site\/wp-content\/uploads(\/.*)?\"<br>\nsudo restorecon -Rv \/caminho\/do\/site\/wp-content\/uploads\n<\/code>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Voc\u00ea vai encontrar tutoriais mandando rodar <code>setenforce 0<\/code> para desativar o SELinux. Isso resolve na hora e <strong>deixa o servidor menos protegido<\/strong> \u2014 \u00e9 troca ruim. Ajuste o contexto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Causa_4_diretivas_deny_na_configuracao\"><\/span>Causa 4: diretivas deny na configura\u00e7\u00e3o<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Procure por regras de bloqueio nos seus arquivos de configura\u00e7\u00e3o:<\/p>\n\n\n\n<div style=\"background:#0b3d91; border-radius:8px; padding:16px 18px; margin:18px 0; font-family:'Courier New', Courier, monospace; overflow-x:auto;\">\n<code style=\"color:#f1f5f9; font-size:13.5px; line-height:1.8;\">\nsudo grep -rn \"deny\\|allow\" \/etc\/nginx\/\n<\/code>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Padr\u00f5es que costumam causar bloqueio indevido:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>deny all;<\/code><\/strong> dentro de um <code><strong>location<\/strong><\/code> mais abrangente que o pretendido<\/li>\n\n\n\n<li>Blocos que negam acesso a arquivos ocultos e acabam pegando o<strong> <code>.well-known<\/code><\/strong> \u2014 o que quebra a valida\u00e7\u00e3o do <a href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/seguranca\/instalar-certificado-ssl-lets-encrypt-directadmin\/\">Let&#8217;s Encrypt<\/a><\/li>\n\n\n\n<li>Regras de <code>allow<\/code> por IP herdadas de uma configura\u00e7\u00e3o antiga, que bloqueiam todo o resto<\/li>\n\n\n\n<li>Bloqueios por<strong> <code>$http_user_agent<\/code><\/strong> que pegam navegadores leg\u00edtimos junto com os bots<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Se encontrar um bloco de arquivos ocultos, a vers\u00e3o segura preserva o <code><strong>.well-known<\/strong><\/code>:<\/p>\n\n\n\n<div style=\"background:#0b3d91; border-radius:8px; padding:16px 18px; margin:18px 0; font-family:'Courier New', Courier, monospace; overflow-x:auto;\">\n<code style=\"color:#f1f5f9; font-size:13.5px; line-height:1.8;\">\nlocation ~ \/\\.(?!well-known) {<br>\n&nbsp;&nbsp;&nbsp;&nbsp;deny all;<br>\n}\n<\/code>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Causa_5_o_erro_so_em_arquivos_estaticos_ou_so_no_PHP\"><\/span>Causa 5: o erro s\u00f3 em arquivos est\u00e1ticos ou s\u00f3 no PHP<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">O comportamento diferente entre os dois tipos de arquivo \u00e9 uma pista valiosa:<\/p>\n\n\n\n<div style=\"overflow-x:auto; margin:24px 0;\">\n<table style=\"width:100%; border-collapse:collapse; font-family:Arial, Helvetica, sans-serif; font-size:14.5px; min-width:560px;\">\n<thead>\n<tr style=\"background-color:#0b3d91; color:#ffffff; text-align:left;\">\n<th style=\"padding:12px 14px; border:1px solid #0b3d91;\">Sintoma<\/th>\n<th style=\"padding:12px 14px; border:1px solid #0b3d91;\">Onde olhar<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"background-color:#f7fafd;\">\n<td style=\"padding:11px 14px; border:1px solid #dde6ef;\">403 em imagens, CSS e JS, mas o HTML carrega<\/td>\n<td style=\"padding:11px 14px; border:1px solid #dde6ef;\">Permiss\u00f5es dos arquivos est\u00e1ticos, ou um <code>location<\/code> espec\u00edfico para eles com regra restritiva<\/td>\n<\/tr>\n<tr style=\"background-color:#ffffff;\">\n<td style=\"padding:11px 14px; border:1px solid #dde6ef;\">403 s\u00f3 nas p\u00e1ginas PHP<\/td>\n<td style=\"padding:11px 14px; border:1px solid #dde6ef;\">O bloco <code>location ~ \\.php$<\/code> e as permiss\u00f5es do socket do PHP-FPM<\/td>\n<\/tr>\n<tr style=\"background-color:#f7fafd;\">\n<td style=\"padding:11px 14px; border:1px solid #dde6ef;\">403 s\u00f3 numa pasta espec\u00edfica<\/td>\n<td style=\"padding:11px 14px; border:1px solid #dde6ef;\">Falta de arquivo \u00edndice naquela pasta, ou um <code>location<\/code> dedicado a ela<\/td>\n<\/tr>\n<tr style=\"background-color:#ffffff;\">\n<td style=\"padding:11px 14px; border:1px solid #dde6ef;\">403 no site inteiro, de repente<\/td>\n<td style=\"padding:11px 14px; border:1px solid #dde6ef;\">Altera\u00e7\u00e3o recente na configura\u00e7\u00e3o, ou permiss\u00f5es alteradas por uma migra\u00e7\u00e3o<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Nginx_como_proxy_do_Apache\"><\/span>Nginx como proxy do Apache<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Uma configura\u00e7\u00e3o comum em pain\u00e9is de hospedagem \u00e9 o Nginx na frente e o Apache atr\u00e1s. Nesse arranjo, o 403 pode vir de <strong>qualquer um dos dois<\/strong> \u2014 e a\u00ed o<strong> <code>.htaccess<\/code><\/strong> volta a importar, porque quem serve o conte\u00fado \u00e9 o Apache.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Como distinguir: se a p\u00e1gina de erro traz a assinatura do Apache, o bloqueio \u00e9 dele; se traz a do Nginx, \u00e9 do Nginx. E os logs s\u00e3o separados \u2014 vale checar os dois.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Depois_de_qualquer_alteracao\"><\/span>Depois de qualquer altera\u00e7\u00e3o<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<div style=\"background:#0b3d91; border-radius:8px; padding:16px 18px; margin:18px 0; font-family:'Courier New', Courier, monospace; overflow-x:auto;\">\n<code style=\"color:#f1f5f9; font-size:13.5px; line-height:1.8;\">\n# Valida a sintaxe antes de aplicar<br>\nsudo nginx -t<br>\n<br>\n# S\u00f3 depois, recarregue<br>\nsudo systemctl reload nginx\n<\/code>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><code>O <code><strong>nginx -t<\/strong><\/code> aponta o arquivo e a linha de qualquer erro de sintaxe <strong>sem derrubar o servidor<\/strong>. Rode sempre antes do reload \u2014 recarregar com configura\u00e7\u00e3o inv\u00e1lida pode deixar o site fora do ar.<\/code><\/p>\n\n\n\n<div style=\"max-width:760px; margin:32px auto; background:linear-gradient(135deg,#1a73e8 0%,#0b3d91 100%); border-radius:16px; padding:32px 28px; font-family:Arial, Helvetica, sans-serif; color:#fff; box-shadow:0 10px 30px rgba(26,115,232,.25);\">\n<div style=\"display:flex; align-items:flex-start; gap:16px; flex-wrap:wrap;\">\n<div style=\"flex:0 0 auto; display:inline-flex; align-items:center; justify-content:center; width:52px; height:52px; border-radius:12px; background:rgba(255,255,255,.18);\">\n<svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#fff\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"4 17 10 11 4 5\"><\/polyline><line x1=\"12\" y1=\"19\" x2=\"20\" y2=\"19\"><\/line><\/svg>\n<\/div>\n<div style=\"flex:1 1 320px; min-width:260px;\">\n<div style=\"font-weight:800; line-height:1.25; margin-bottom:8px; font-size:19px;\">Acesso root, logs completos e suporte que fala a sua l\u00edngua<\/div>\n<p style=\"margin:0 0 18px; line-height:1.6; color:#dbe7fb;\">Configurar Nginx exige controle total do servidor. Os VPS da Homehost d\u00e3o acesso root, servidor no Brasil, backup autom\u00e1tico e suporte t\u00e9cnico em portugu\u00eas \u2014 para quando o log n\u00e3o estiver dizendo o \u00f3bvio.<\/p>\n<a href=\"https:\/\/www.homehost.com.br\/servidores-vps\/\" style=\"display:inline-flex; align-items:center; gap:8px; background:#fff; color:#1a73e8; font-weight:700; text-decoration:none; padding:13px 26px; border-radius:10px; box-shadow:0 4px 12px rgba(0,0,0,.15);\">\nVer servidores VPS\n<svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#1a73e8\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 12h14M13 6l6 6-6 6\"><\/path><\/svg>\n<\/a>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Perguntas_frequentes\"><\/span>Perguntas frequentes<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>O que causa o erro 403 Forbidden no Nginx?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As tr\u00eas causas dominantes s\u00e3o a diretiva <code>try_files<\/code> ausente ou incorreta, permiss\u00f5es que impedem o usu\u00e1rio do Nginx de ler os arquivos, e o SELinux bloqueando o acesso ao diret\u00f3rio em servidores CentOS, AlmaLinux ou Rocky. Regras <code>deny<\/code> na configura\u00e7\u00e3o e bloqueios de CDN completam a lista.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>O Nginx usa arquivo .htaccess?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e3o. O Nginx n\u00e3o l\u00ea <code>.htaccess<\/code> \u2014 toda a configura\u00e7\u00e3o fica centralizada em <code>\/etc\/nginx\/<\/code>. Se houver um <code>.htaccess<\/code> na pasta do seu site, ele \u00e9 ignorado. Por isso, renomear ou apagar esse arquivo n\u00e3o resolve um 403 no Nginx, ao contr\u00e1rio do que muitos tutoriais gen\u00e9ricos sugerem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>O que significa &#8220;directory index is forbidden&#8221; no log do Nginx?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Significa que o Nginx tentou listar o conte\u00fado de uma pasta porque n\u00e3o encontrou arquivo \u00edndice, e a listagem est\u00e1 desativada por padr\u00e3o. A solu\u00e7\u00e3o \u00e9 configurar corretamente a diretiva <code>try_files<\/code> e garantir que exista um <code>index.php<\/code> ou <code>index.html<\/code> na pasta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>O n\u00famero da vers\u00e3o na p\u00e1gina de erro do Nginx importa?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e3o. A p\u00e1gina de erro mostra algo como <code>nginx\/1.18.0 (Ubuntu)<\/code> apenas para identificar o servidor. Esse n\u00famero n\u00e3o tem rela\u00e7\u00e3o com a causa do bloqueio, e a solu\u00e7\u00e3o \u00e9 a mesma em todas as vers\u00f5es.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Como o SELinux causa erro 403 no Nginx?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O SELinux bloqueia o Nginx de acessar diret\u00f3rios cujo contexto de seguran\u00e7a n\u00e3o permite conte\u00fado web. O sintoma caracter\u00edstico \u00e9 403 no navegador com permiss\u00f5es corretas e <strong>nada registrado no log do Nginx<\/strong> \u2014 o bloqueio aparece em <code>\/var\/log\/audit\/audit.log<\/code>. A solu\u00e7\u00e3o \u00e9 ajustar o contexto com <code>semanage<\/code> e <code>restorecon<\/code>, n\u00e3o desativar o SELinux.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Qual usu\u00e1rio o Nginx utiliza para ler os arquivos?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Depende da distribui\u00e7\u00e3o: <code>www-data<\/code> no Debian e Ubuntu, <code>nginx<\/code> no CentOS, AlmaLinux e Rocky. Confirme com <code>grep \"^user\" \/etc\/nginx\/nginx.conf<\/code>. Esse usu\u00e1rio precisa de leitura nos arquivos e execu\u00e7\u00e3o em todas as pastas do caminho at\u00e9 o site.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ativar o autoindex resolve o erro 403?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Faz o erro sumir, mas n\u00e3o \u00e9 solu\u00e7\u00e3o: em vez do 403, o visitante passa a ver a lista de todos os arquivos da pasta, o que \u00e9 risco de seguran\u00e7a. O correto \u00e9 configurar o <code>try_files<\/code> e garantir o arquivo \u00edndice. O <code>autoindex<\/code> s\u00f3 deve ser usado em pastas onde a listagem \u00e9 intencional.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Recebo 403 s\u00f3 nas imagens e arquivos CSS. Por qu\u00ea?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Normalmente s\u00e3o permiss\u00f5es dos arquivos est\u00e1ticos, ou um bloco <code>location<\/code> espec\u00edfico para eles com alguma regra restritiva. Verifique se esses arquivos t\u00eam permiss\u00e3o 644 e se o bloco que trata de extens\u00f5es est\u00e1ticas na sua configura\u00e7\u00e3o n\u00e3o cont\u00e9m <code>deny<\/code>.<\/p>\n\n\n\n<script type=\"application\/ld+json\">\n{\n\"@context\": \"https:\/\/schema.org\",\n\"@type\": \"FAQPage\",\n\"mainEntity\": [\n{\"@type\":\"Question\",\"name\":\"O que causa o erro 403 Forbidden no Nginx?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"As tr\u00eas causas dominantes s\u00e3o a diretiva try_files ausente ou incorreta, permiss\u00f5es que impedem o usu\u00e1rio do Nginx de ler os arquivos, e o SELinux bloqueando o acesso ao diret\u00f3rio em servidores CentOS, AlmaLinux ou Rocky. Regras deny na configura\u00e7\u00e3o e bloqueios de CDN completam a lista.\"}},\n{\"@type\":\"Question\",\"name\":\"O Nginx usa arquivo .htaccess?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"N\u00e3o. O Nginx n\u00e3o l\u00ea .htaccess, pois toda a configura\u00e7\u00e3o fica centralizada em \/etc\/nginx\/. Se houver um .htaccess na pasta do seu site, ele \u00e9 ignorado. Por isso, renomear ou apagar esse arquivo n\u00e3o resolve um 403 no Nginx, ao contr\u00e1rio do que muitos tutoriais gen\u00e9ricos sugerem.\"}},\n{\"@type\":\"Question\",\"name\":\"O que significa directory index is forbidden no log do Nginx?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Significa que o Nginx tentou listar o conte\u00fado de uma pasta porque n\u00e3o encontrou arquivo \u00edndice, e a listagem est\u00e1 desativada por padr\u00e3o. A solu\u00e7\u00e3o \u00e9 configurar corretamente a diretiva try_files e garantir que exista um index.php ou index.html na pasta.\"}},\n{\"@type\":\"Question\",\"name\":\"O n\u00famero da vers\u00e3o na p\u00e1gina de erro do Nginx importa?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"N\u00e3o. A p\u00e1gina de erro mostra a vers\u00e3o apenas para identificar o servidor. Esse n\u00famero n\u00e3o tem rela\u00e7\u00e3o com a causa do bloqueio, e a solu\u00e7\u00e3o \u00e9 a mesma em todas as vers\u00f5es.\"}},\n{\"@type\":\"Question\",\"name\":\"Como o SELinux causa erro 403 no Nginx?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"O SELinux bloqueia o Nginx de acessar diret\u00f3rios cujo contexto de seguran\u00e7a n\u00e3o permite conte\u00fado web. O sintoma caracter\u00edstico \u00e9 403 no navegador com permiss\u00f5es corretas e nada registrado no log do Nginx, j\u00e1 que o bloqueio aparece em \/var\/log\/audit\/audit.log. A solu\u00e7\u00e3o \u00e9 ajustar o contexto com semanage e restorecon, n\u00e3o desativar o SELinux.\"}},\n{\"@type\":\"Question\",\"name\":\"Qual usu\u00e1rio o Nginx utiliza para ler os arquivos?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Depende da distribui\u00e7\u00e3o: www-data no Debian e Ubuntu, nginx no CentOS, AlmaLinux e Rocky. Confirme no arquivo nginx.conf. Esse usu\u00e1rio precisa de leitura nos arquivos e execu\u00e7\u00e3o em todas as pastas do caminho at\u00e9 o site.\"}},\n{\"@type\":\"Question\",\"name\":\"Ativar o autoindex resolve o erro 403?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Faz o erro sumir, mas n\u00e3o \u00e9 solu\u00e7\u00e3o: em vez do 403, o visitante passa a ver a lista de todos os arquivos da pasta, o que \u00e9 risco de seguran\u00e7a. O correto \u00e9 configurar o try_files e garantir o arquivo \u00edndice. O autoindex s\u00f3 deve ser usado em pastas onde a listagem \u00e9 intencional.\"}},\n{\"@type\":\"Question\",\"name\":\"Recebo 403 s\u00f3 nas imagens e arquivos CSS. Por qu\u00ea?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Normalmente s\u00e3o permiss\u00f5es dos arquivos est\u00e1ticos, ou um bloco location espec\u00edfico para eles com alguma regra restritiva. Verifique se esses arquivos t\u00eam permiss\u00e3o 644 e se o bloco que trata de extens\u00f5es est\u00e1ticas na sua configura\u00e7\u00e3o n\u00e3o cont\u00e9m deny.\"}}\n]\n}\n<\/script>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Veja_tambem\"><\/span>Veja tamb\u00e9m<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para o erro 403 em geral \u2014 incluindo Apache, WordPress e as solu\u00e7\u00f5es do lado do visitante \u2014, veja nosso guia sobre o <a href=\"https:\/\/www.homehost.com.br\/blog\/desenvolvedores\/erro-403-forbidden\/\">erro 403 Forbidden<\/a>. Outros erros comuns no Nginx: <a href=\"https:\/\/www.homehost.com.br\/blog\/tutoriais\/php\/http-erro-500\/\">500 Internal Server Error<\/a>, <a href=\"https:\/\/www.homehost.com.br\/blog\/internet\/erro-502-bad-gateway\/\">502 Bad Gateway<\/a> e <a href=\"https:\/\/www.homehost.com.br\/blog\/internet\/erro-504-gateway-timeout\/\">504 Gateway Timeout<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Conclusao\"><\/span>Conclus\u00e3o<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">O 403 no Nginx parece misterioso porque a maioria dos tutoriais fala de <code>.htaccess<\/code> \u2014 arquivo que o Nginx nem l\u00ea. Na pr\u00e1tica s\u00e3o tr\u00eas suspeitos: o <code>try_files<\/code>, as permiss\u00f5es do usu\u00e1rio do servidor, e o SELinux nas distribui\u00e7\u00f5es baseadas em Red Hat. E o log resolve quase tudo: deixe o <code>tail -f<\/code> rodando, recarregue a p\u00e1gina, e a linha que aparecer aponta a causa. S\u00f3 n\u00e3o esque\u00e7a de rodar <code>nginx -t<\/code> antes de recarregar a configura\u00e7\u00e3o \u2014 validar a sintaxe antes de aplicar evita transformar um 403 num site inteiro fora do ar.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O erro 403 Forbidden no Nginx tem tr\u00eas causas dominantes: a diretiva try_files ausente ou incorreta, permiss\u00f5es que impedem o processo do Nginx de ler os arquivos, e \u2014 em servidores CentOS, AlmaLinux ou Rocky \u2014 o SELinux bloqueando o acesso ao diret\u00f3rio. O que praticamente nunca \u00e9 a causa: o .htaccess, porque o Nginx [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":17029,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_helpful_status":1,"_lmt_disableupdate":"","_lmt_disable":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[203],"tags":[],"class_list":["post-17028","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-internet"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>403 Forbidden no Nginx: causas e como resolver | Homehost<\/title>\n<meta name=\"description\" content=\"O erro 403 no Nginx quase sempre \u00e9 try_files, permiss\u00f5es ou SELinux \u2014 e n\u00e3o .htaccess, que o Nginx nem usa. Veja o diagn\u00f3stico completo, passo a passo.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"403 Forbidden no Nginx: causas e como resolver | Homehost\" \/>\n<meta property=\"og:description\" content=\"O erro 403 no Nginx quase sempre \u00e9 try_files, permiss\u00f5es ou SELinux \u2014 e n\u00e3o .htaccess, que o Nginx nem usa. Veja o diagn\u00f3stico completo, passo a passo.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/\" \/>\n<meta property=\"og:site_name\" content=\"Homehost\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Homehost\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-31T12:26:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-31T12:30:06+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2026\/07\/Erro-403-no-Nginx.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1672\" \/>\n\t<meta property=\"og:image:height\" content=\"941\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Gustavo Gallas\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Homehost\" \/>\n<meta name=\"twitter:site\" content=\"@Homehost\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Gustavo Gallas\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/\",\"url\":\"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/\",\"name\":\"403 Forbidden no Nginx: causas e como resolver | Homehost\",\"isPartOf\":{\"@id\":\"https:\/\/www.homehost.com.br\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2026\/07\/Erro-403-no-Nginx.png\",\"datePublished\":\"2026-07-31T12:26:28+00:00\",\"dateModified\":\"2026-07-31T12:30:06+00:00\",\"author\":{\"@id\":\"https:\/\/www.homehost.com.br\/blog\/#\/schema\/person\/df8002f43fc55e7f4e132abb2a6ddbc4\"},\"description\":\"O erro 403 no Nginx quase sempre \u00e9 try_files, permiss\u00f5es ou SELinux \u2014 e n\u00e3o .htaccess, que o Nginx nem usa. Veja o diagn\u00f3stico completo, passo a passo.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/#primaryimage\",\"url\":\"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2026\/07\/Erro-403-no-Nginx.png\",\"contentUrl\":\"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2026\/07\/Erro-403-no-Nginx.png\",\"width\":1672,\"height\":941,\"caption\":\"Erro 403 no Nginx\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\/\/www.homehost.com.br\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"403 Forbidden no Nginx: causas e como resolver\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.homehost.com.br\/blog\/#website\",\"url\":\"https:\/\/www.homehost.com.br\/blog\/\",\"name\":\"Homehost\",\"description\":\"Hospedagem De Sites\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.homehost.com.br\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.homehost.com.br\/blog\/#\/schema\/person\/df8002f43fc55e7f4e132abb2a6ddbc4\",\"name\":\"Gustavo Gallas\",\"description\":\"Analista de sistemas, formado pela PUC-Rio. Programador, gestor de redes e diretor da empresa Homehost. Pai do B\u00f3ris, seu pet de estima\u00e7\u00e3o. Gosta de rock'n'roll, cerveja artesanal e de escrever sobre assuntos t\u00e9cnicos. Contato: gustavo.blog@homehost.com.br\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"403 Forbidden no Nginx: causas e como resolver | Homehost","description":"O erro 403 no Nginx quase sempre \u00e9 try_files, permiss\u00f5es ou SELinux \u2014 e n\u00e3o .htaccess, que o Nginx nem usa. Veja o diagn\u00f3stico completo, passo a passo.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/","og_locale":"pt_BR","og_type":"article","og_title":"403 Forbidden no Nginx: causas e como resolver | Homehost","og_description":"O erro 403 no Nginx quase sempre \u00e9 try_files, permiss\u00f5es ou SELinux \u2014 e n\u00e3o .htaccess, que o Nginx nem usa. Veja o diagn\u00f3stico completo, passo a passo.","og_url":"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/","og_site_name":"Homehost","article_publisher":"https:\/\/www.facebook.com\/Homehost\/","article_published_time":"2026-07-31T12:26:28+00:00","article_modified_time":"2026-07-31T12:30:06+00:00","og_image":[{"width":1672,"height":941,"url":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2026\/07\/Erro-403-no-Nginx.png","type":"image\/png"}],"author":"Gustavo Gallas","twitter_card":"summary_large_image","twitter_creator":"@Homehost","twitter_site":"@Homehost","twitter_misc":{"Escrito por":"Gustavo Gallas","Est. tempo de leitura":"10 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/","url":"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/","name":"403 Forbidden no Nginx: causas e como resolver | Homehost","isPartOf":{"@id":"https:\/\/www.homehost.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/#primaryimage"},"image":{"@id":"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/#primaryimage"},"thumbnailUrl":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2026\/07\/Erro-403-no-Nginx.png","datePublished":"2026-07-31T12:26:28+00:00","dateModified":"2026-07-31T12:30:06+00:00","author":{"@id":"https:\/\/www.homehost.com.br\/blog\/#\/schema\/person\/df8002f43fc55e7f4e132abb2a6ddbc4"},"description":"O erro 403 no Nginx quase sempre \u00e9 try_files, permiss\u00f5es ou SELinux \u2014 e n\u00e3o .htaccess, que o Nginx nem usa. Veja o diagn\u00f3stico completo, passo a passo.","breadcrumb":{"@id":"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/#primaryimage","url":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2026\/07\/Erro-403-no-Nginx.png","contentUrl":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2026\/07\/Erro-403-no-Nginx.png","width":1672,"height":941,"caption":"Erro 403 no Nginx"},{"@type":"BreadcrumbList","@id":"https:\/\/www.homehost.com.br\/blog\/internet\/403-forbidden-nginx\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/www.homehost.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"403 Forbidden no Nginx: causas e como resolver"}]},{"@type":"WebSite","@id":"https:\/\/www.homehost.com.br\/blog\/#website","url":"https:\/\/www.homehost.com.br\/blog\/","name":"Homehost","description":"Hospedagem De Sites","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.homehost.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/www.homehost.com.br\/blog\/#\/schema\/person\/df8002f43fc55e7f4e132abb2a6ddbc4","name":"Gustavo Gallas","description":"Analista de sistemas, formado pela PUC-Rio. Programador, gestor de redes e diretor da empresa Homehost. Pai do B\u00f3ris, seu pet de estima\u00e7\u00e3o. Gosta de rock'n'roll, cerveja artesanal e de escrever sobre assuntos t\u00e9cnicos. Contato: gustavo.blog@homehost.com.br"}]}},"modified_by":"ad_hmhst","jetpack_featured_media_url":"https:\/\/www.homehost.com.br\/blog\/wp-content\/uploads\/2026\/07\/Erro-403-no-Nginx.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/posts\/17028","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/comments?post=17028"}],"version-history":[{"count":3,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/posts\/17028\/revisions"}],"predecessor-version":[{"id":17033,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/posts\/17028\/revisions\/17033"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/media\/17029"}],"wp:attachment":[{"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/media?parent=17028"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/categories?post=17028"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.homehost.com.br\/blog\/wp-json\/wp\/v2\/tags?post=17028"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}