Eu tenho três nomes de domínio e estou tentando hospedar todos os três sites em um servidor (uma gota do Digital Ocean) usando o Nginx.
mysite1.name mysite2.name mysite3.name
Apenas 1 deles funciona. Os outros dois resultam em erros 403 (da mesma maneira).
Na minha log de erro nginx, eu vejo: [error] 13108#0: *1 directory index of "/usr/share/nginx/mysite2.name/live/" is forbidden
.
Minha configuração habilitada para sites é:
server {
server_name www.mysite2.name;
return 301 $scheme://mysite2.name$request_uri;
}
server {
server_name mysite2.name;
root /usr/share/nginx/mysite2.name/live/;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.html index.php;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
Todos os 3 sites têm arquivos de configuração quase idênticos.
Os arquivos de cada site estão em pastas como /usr/share/nginx/mysite1.name/someFolder e /usr/share/nginx/mysite1.name/live é um link simbólico para isso. (O mesmo para o meu site2 e o meu site3.)
Eu olhei para o Nginx 403 proibido para todos os arquivos, mas isso não ajudou.
Alguma idéia do que pode estar errado?
index.html
index.php
arquivos ausentes, você se certificou de que eles existem nessa pasta?root
que estava em/Users/myUsername/code/app
vez de/Users/myUsername/code/app/public
.Respostas:
Se você tem a indexação de diretório desativada e está tendo esse problema, provavelmente é porque o try_files que você está usando possui uma opção de diretório:
Remova-o e deve funcionar:
Por que isso acontece
TL; DR: Isso é causado porque o nginx tentará indexar o diretório e será bloqueado por si só. Lançando o erro mencionado pelo OP.
try_files $uri $uri/
significa que, no diretório raiz, tente o arquivo apontado pelouri
, se não existir, tente um diretório (daí o/
). Quando o nginx acessa um diretório, ele tenta indexá-lo e retornar a lista de arquivos dentro dele para o navegador / cliente; no entanto, a indexação de diretório padrão está desativada e, portanto, retorna o erro "Nginx 403 error: directory index of [folder] é proibido ".A indexação de diretório é controlada pela
autoindex
opção: https://nginx.org/en/docs/http/ngx_http_autoindex_module.htmlfonte
try_files
não estava tentandoindex.php
, eu apenas continuei recebendo 403 com "é proibido índice do diretório de ..."$uri/
criar um problema?try_files $uri $uri/
significa, a partir da raiz da web, tente o arquivo apontado pelo uri; se isso não existir, tente um diretório (por isso, o/
). Quando o nginx acessa um diretório, ele tenta indexá-lo e retornar a lista de arquivos dentro dele para o navegador / cliente; no entanto, a indexação de diretório padrão está desativada e, portanto, retorna o erro "Nginx 403 error: directory index of [folder] é proibido ". A indexação de diretório é controlada pelaautoindex
opção: nginx.org/en/docs/http/ngx_http_autoindex_module.htmlAqui está a configuração que funciona:
Então a única saída no navegador foi um erro do Laravel: "Opa, parece que algo deu errado."
NÃO corra
chmod -R 777 app/storage
( nota ). Tornar algo gravável no mundo é uma má segurança.chmod -R 755 app/storage
funciona e é mais seguro.fonte
www-data
no debian. Em seguida, defina permissões ainda mais rígidas na pasta, como:chmod -R 640 app/storage
entãochown -R :www-data app/storage
. Dessa forma, os arquivos são visíveis apenas para o proprietário do aplicativo e o servidor da web. E ninguém pode executar diretamente nenhum dos arquivos armazenados (possivelmente carregados). O Nginx deve precisar apenas de permissão de leitura para acessar os arquivos.public/
emroot /usr/share/nginx/mysitename/public/;
. Depois de adicionarpublic/
e executarservice nginx restart
, funcionou.Se você está simplesmente tentando listar o conteúdo do diretório, use
autoindex on;
como:fonte
autoindex on
; seria uma má idéia expor o conteúdo do meu diretório ao público.Encontrei erro semelhante
--- "403 Proibido" na página da web
--- "13: Permissão negada" no log de erros em /var/log/nginx/error.log
Abaixo 3 etapas trabalhadas para mim:
1: Abra o Terminal, viu algo como abaixo
Então, meu nome de usuário é "user1" (de cima)
2: Usuário alterado no /etc/nginx/nginx.conf
3: Recarregou o nginx
Além disso, apliquei permissões de arquivo / pasta (antes de executar acima de 3 etapas)
(755 no meu diretório, digamos / dir1 /) & (644 para arquivos nesse diretório):
(não tenho certeza, se esta etapa adicional é realmente necessário, um pouco acima de três etapas pode ser suficiente):
Espero que isso ajude alguém rápido. Boa sorte.
fonte
De fato, há várias coisas que você precisa verificar. 1. verifique o status de execução do seu nginx
Aqui precisamos verificar quem está executando o nginx. lembre-se do usuário e do grupo
verificar o status de acesso da pasta
ls -alt
comparar com o status da pasta com os nginx
(1) se o status de acesso da pasta não estiver correto
(2) se o usuário e o grupo da pasta não forem os mesmos que os do nginx
e altere o nome de usuário e o grupo em execução do nginx
para descobrir onde está o arquivo de configuração nginx
Como o usuário da execução padrão do nginx não é ninguém e o grupo é ninguém. se não notarmos esse usuário e grupo, 403 será apresentado.
fonte
Eu tive o mesmo problema, o arquivo de log me mostrou este erro:
Estou hospedando um aplicativo PHP com estrutura codeignitor. Quando eu queria visualizar os arquivos enviados, recebi um
403 Error
.O problema era que o
nginx.conf
não estava definido corretamente. Ao invés deeu apenas incluí
Eu tenho um index.php na minha raiz e eu pensei que era o suficiente, eu estava errado;) A dica me deu NginxLibrary
fonte
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
index index.html index.htm index.php;
Você pode obter isso por causa da política do Nginx (por exemplo, "negar") ou por causa da configuração incorreta do Nginx ou por causa de restrições do sistema de arquivos.
Você pode determinar se é o mais recente (e possivelmente ver evidências de uma configuração incorreta usando strace (exceto, o OP não terá acesso a isso):
Aqui, estou inspecionando a atividade do sistema de arquivos feita pelo nginx durante a execução de um teste (tive o mesmo erro que você).
Aqui está uma parte selecionada da minha configuração no momento
No meu caso, como strace mostra claramente, a junção de no "alias" ao "índice" não era o que eu esperava, e parece que eu preciso adquirir o hábito de sempre acrescentar nomes de diretório com um /, então no meu caso, o seguinte funcionou:
fonte
/home/web/public
. Por que o nginx tenta acessar esses arquivos não encontrados é porque eu esqueci de remover essa linha,index index.html index.htm index.nginx-debian.html;
pois esses arquivos não estão dentro do meu diretório público.Parece que há algum problema de permissão.
Tente definir todas as permissões como você fez no meu site1 para o site dos outros.
Por padrão, as permissões de arquivo devem ser 644 e dirs 755. Verifique também se o usuário que executa o nginx tem permissão para ler esses arquivos e dirs.
fonte
mude
try_files
para apontar para oindex.php
caminho, no "Laravel" que você mencionou, deve ser algo como istoE no projeto "codeigniter", tente assim
fonte
Como você está usando
php-fpm
, verifique se ophp-fpm
usuário é igual aonginx
usuário.Verifique
/etc/php-fpm.d/www.conf
e defina usuário e grupo php comonginx
se não estiver.O
php-fpm
usuário precisa de permissão de gravação.fonte
Você precisa executar permissão no diretório de arquivos estáticos. Eles também precisam ser mostrados pelo usuário e grupo do nginx.
fonte
Alterar padrão
para
resolveu meu problema.
fonte
Eu estava executando o Ubuntu 15.10 e encontrou o erro 403 Proibido por um motivo simples. No nginx.conf (arquivo de configuração do nginx), o usuário era 'www-data'. Depois que mudei o nome de usuário para [meu nome de usuário], funcionou bem, assumindo que as permissões necessárias foram dadas ao meu nome de usuário. Passos seguidos por mim:
Meu arquivo de configuração fica assim:
fonte
Para mim, o problema era que quaisquer rotas diferentes da rota base estavam funcionando, adicionando esta linha corrigi meu problema:
Coisa completa:
fonte
Para corrigir esse problema, passei uma noite inteira. Aqui estão meus dois centavos nesta história,
Esta é uma observação: Se você estiver usando o mysql, e as conexões do hhvm ao mysql se tornarem impossíveis, verifique se você tem o aparmor instalado. desative-o.
fonte
Resolvi meu problema, se eu configurar como segue:
Ele mostrará o erro 403.
Eu tentei
autoindex on
, mas não estou trabalhando. Se eu mudar o meu configure assim, ele funciona.Eu acho que a correspondência exata, se for um caminho, deve ser um diretório.
fonte
quando você quiser manter a opção de diretório, você pode colocar o index.php à frente de $ uri assim.
fonte