Estou usando a configuração padrão ao adicionar o diretório específico com o nginx instalado na minha máquina ubuntu 12.04.
server {
#listen 80; ## listen for ipv4; this line is default and implied
#listen [::]:80 default ipv6only=on; ## listen for ipv6
index index.html index.htm;
# Make site accessible from http://localhost/
server_name localhost;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to index.html
root /username/test/static;
try_files $uri $uri/ /index.html;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
...
...
}
Eu só quero um servidor nginx estático simples para servir arquivos fora desse diretório. No entanto, verificando o error.log
que eu vejo
2014/09/10 16:55:16 [crit] 10808#0: *2 stat() "/username/test/static/index.html" failed (13: Permission denied), client:, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "domain"
2014/09/10 16:55:16 [error] 10808#0: *2 rewrite or internal redirection cycle while internally redirecting to "/index.html
Eu já fiz chown -R www-data:www-data
em /username/test/static
, eu configurei-los para chmod 755
. Não sei o que mais precisa ser definido.
www-data
usuário podecd
/username/test/static
sudo -u www-data cd /username/test/static
Respostas:
O Nginx opera dentro do diretório, portanto, se você não
cd
conseguirstat
acessar esse diretório do usuário nginx, ele falhará (assim como o comando em seu log). Certifique-se de que awww-user
lata vaicd
até o/username/test/static
. Você pode confirmar se ostat
falhará ou terá sucesso executandoNo seu caso, provavelmente o
/username
diretório é o problema aqui. Normalmentewww-data
não tem permissão paracd
acessar os diretórios pessoais de outros usuários.A melhor solução nesse caso seria adicionar
www-data
aousername
grupo:e certifique-se de que esse
username
grupo pode inserir todos os diretórios ao longo do caminho:Para que suas alterações funcionem, reinicie o nginx
fonte
umask
. Se você precisa de uma solução mais genérica, que não requerchmod
todos os novos diretórios, então existe uma solução. Requer associação reversa de grupo (username
parawww-data
grupo) e o uso desetgid
. Sinta-se à vontade para postar uma nova pergunta para uma descrição mais elaborada e terei prazer em responder.nginx
usuário pode conseguir acessar o diretório do meu site, mas ainda diz permissão negada nos logs de erro.Acabo de ter o mesmo problema em uma caixa CentOS 7.
Parece que atingi o selinux. Colocar o selinux no modo permissivo (
setenforce permissive
) resolveu o problema por enquanto. Vou tentar voltar com uma correção adequada.fonte
ls -Z myFile.js
irá mostrar o contexto SELinux:-rw-r--r--. nginx nginx unconfined_u:object_r:user_home_t:s0 myFile.js
Usechcon -v --type=httpd_sys_content_t myFile
para alterar o conteúdo SELinux.sudo setenforce 0
consertou para mim.SELINUX
valor paradisabled
in/etc/selinux/config
, seguido por uma reinicialização. Quando definido comopermissive
, ele ainda pode executar verificações nos bastidores (usando uma CPU valiosa), mas não executa nenhuma ação.O Nginx precisa ter acesso + x em todos os diretórios que levam ao diretório raiz do site.
Certifique-se de ter + x em todos os diretórios no caminho que conduz à raiz do site. Por exemplo, se a raiz do site for / home / username / siteroot:
fonte
No CentOS 7.0 eu tive esse
Access Deined
problema causado pelo SELinux e estas etapas resolveram o problema:Atualização: Apenas uma observação do que aprendi ao usar os servidores Linux virtuais da digitalocean, ou como eles chamam de Droplets . Usar o SELinux requer uma quantidade decente de RAM. É mais provável que você não consiga executar e gerenciar o SELinux em um droplet com menos de 2 GB de RAM.
fonte
setenforce 0
. No entanto, ao olhar para trás para o que esta solução realmente faz, percebi que precisava executar novamente os comandos para atualizar as permissões para o usuário nginx. Isso pareceu funcionar e eu poderia fazer o SELinux voltar a ser aplicado.Você pode ter o Security-Enhanced Linux em execução, portanto, adicione uma regra para isso. Tive permissão 13 erros, embora as permissões tenham sido definidas e o usuário existisse.
chcon -Rt httpd_sys_content_t /username/test/static
fonte
Sintoma:
Não foi possível fazer upload de imagens para a biblioteca de mídia do WordPress.
Causa:
(CentOS)
yum update
Erro:
Solução:
chown -R www-data:www-data /var/lib/nginx
fonte
Por padrão, os dados estáticos, quando você instala o nginx, estarão em / var / www / html. Portanto, você pode apenas copiar sua pasta estática em / var / html / e definir o
em ngix.conf (ou / etc / nginx / sites-available / default)
Isso funcionou para mim no Ubuntu, mas acho que não deve ser muito diferente para outras distros.
Espero que ajude.
fonte
Mude sua
nginx.conf
user
propriedade parawww-static
arquivos owener.fonte
Eu enfrentei esse problema, resolvi para dar permissões ao usuário nginx e agrupar algo assim:
fonte
No meu caso, a pasta que servia os arquivos era um link simbólico para outra pasta, feito com
Mesmo que as permissões (usuário e grupo) estivessem corretas na pasta de destino (o link simbólico), ainda tive o erro porque o Nginx precisava ter permissões para a hierarquia de toda a pasta de origem também.
fonte
Eu finalmente encontrei meu caminho. Resumindo, digamos que seu nome de usuário é
joe
e você possui um site em seu sistema de arquivos pessoal/home/joe/path/to/website
.Você literalmente tem que dizer ao sistema que
nginx
é seu amigo.Colocar
nginx
nojoe
grupo:Depois disso, se ainda não funcionar, verifique o acesso correto do
/home/joe
diretório. Essa é provavelmente a razão pela qual o nginx não consegue acessar o arquivo, porque mesmo que ele seja seu amigo agora você tem que abrir a porta de sua casa para ele:É isso aí. Isso é literalmente tudo que você precisa fazer para dar ao nginx acesso aos seus arquivos locais :)
Não acho que haja preocupações de segurança com esse método porque
nginx
é a autoridade máxima e apenas um administrador pode alterar o grupo.nginx
agora pode ler o que está nosjoe
diretórios. É apenas uma violação de segurança se o titular danginx
conta for diferente do usuário a partir do qual você abre o acesso ao diretório, mas no meu caso sou o titular de ambas as partes, ou seja, em um contexto local.fonte
Eu tive o mesmo problema, estou usando o Plesk Onyx 17 com Centos7. Pude ver esse erro em proxy_error_log nos logs do domínio afetado. Todos os diretórios / arquivos em / var / www / vhosts / são de propriedade dos respectivos usuários (proprietários de domínio) e você pode ver que todos eles estão no grupo psacln. Portanto, a solução foi adicionar o nginx também a este grupo, para que ele possa ver o que precisa:
E, de fato, reinicie o nginx e recarregue a página com Ctrl + F5.
fonte
Eu encontrei uma solução alternativa: Mudei a pasta para a pasta de configuração do nginx, no meu caso "/ etc / nginx / my-web-app". E então alterou as permissões para o usuário root "sudo chown -R root: root" my-web-app ".
fonte
Você também pode adicionar qual usuário executará o nginx. No arquivo nginx.conf, faça as seguintes alterações:
Você pode adicionar a linha acima como a primeira linha em seu nginx conf. Você pode escrever o nome de qualquer usuário que tenha permissão para escrever nesse diretório.
fonte
Este é geralmente o problema de privilégios ... Para mim, é porque eu uso o / root / ** como raiz do nginx, ele precisa de privilégios mais elevados. Uma maneira fácil é simplesmente mover o projeto para um diretório criado por você.
fonte