nginx - problema interessante de permissões do Linux

1

Gostaria de obter algumas respostas ou sugestões para o meu problema.
Então, estou recebendo um erro simples:

2014/02/16 12:01:43 [error] 7384#0: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm.sock:", host: "localhost"

Primeiramente, minha configuração nginx é bem feita (para mim - ou seja, está funcionando bem). O único problema que tenho é com permissões de linux para arquivos / pastas. Não consigo entender uma situação em que estou. Ok, então aqui estão algumas informações necessárias:

  • meu nginx funciona bem, com PHP e mysql configurados.
  • um usuário usado para nginx é chamado de " nginx "
  • index index.php index.html index.htm (configuração nginx para diretiva de índice)

Aqui está o meu problema:

Eu tenho uma árvore como: / home / user /

home dir é: root: root com 755
user dir é: usuário: usuário com 700

Eu criei um arquivo chamado index.php em /home/user/index.php . Nginx disse (/var/log/nginx/error.log) que não tenho permissões. Ok, eu fiz " usermod -a nginx -G user " e alterei as permissões para " usuário " dir para: 750 (então agora nginx pertence ao grupo do usuário e pode ler ou executar o conteúdo do diretório do usuário). Ok, isso funciona, mas não de maneira 100%. Se eu criar agora um arquivo index.html , ou index.htm - o nginx funciona em um navegador! Uau! sim .. agora eu quero criar index.php , para escrever algum código. Estrondo! O arquivo não foi encontrado. Hmmm, isso é realmente interessante para mim, o que eu fiz de errado? O fato interessante é que, se eu alterar as permissões do usuário para: 755 (de 750 ), o nginx verá index.php . Se bem entendi, o nginx passa primeiro pelas permissões " o " no diretório / home ( r-x ). Em seguida, ele precisa ir para o diretório " usuário ", e como o usuário nginx está no grupo do usuário, o nginx pode dar o próximo passo para usar as permissões " g " ( user / dir permissões) para entrar. Mas o que está fazendo nginx não pode ver index.php (e vê index.html e .htm)?

Ok, talvez meu conhecimento tenha alguns bugs, mas eu preciso perguntar por que isso acontece?

    
por ElvisEFTV 16.02.2014 / 12:51

3 respostas

0

Bem, a questão é quais são as suas permissões de arquivo?

Como você está rodando o php como um cgi, ele provavelmente precisa do a + x para o grupo nos arquivos .php, o que provavelmente não tem no caso normal. E isso não acontece com a exibição do .html, que obviamente é apenas lido, não executado.

    
por 16.02.2014 / 13:17
0

Queria responder no Stackoverflow, mas sua pergunta foi encerrada para rápida, feliz por você ter mudado aqui.

Primary script unknown é reportado pelo php-fpm e quase sempre um problema com o caminho que você passa (do nginx) para o php-fpm. O processo simplesmente não consegue encontrar nenhum arquivo PHP nesse local. No seu caso, não é possível encontrar o arquivo porque o processo do php-fpm não tem permissões para ler o arquivo. Isso mesmo, você não precisa de nenhuma permissão de execução para um script PHP (a menos que seja um ponto de entrada da CLI). A razão para isso é simples, os scripts PHP não são executados, eles são analisados (leia).

Geralmente, é uma boa idéia usar o mesmo usuário / grupo para nginx, PHP e php-fpm, se for o seu servidor e ninguém estiver mexendo. Em seguida, aplique as seguintes permissões (assumindo /var/www como raiz para todos os sites, o que é melhor prática):

# Fix user and group for all directories and files.
$ chown -R www-data:www-data /var/www

# Fix directory permissions (incl. sticky bit for group).
$ find /var/www -type d -exec chmod 2770 {} \;

# Fix file permissions (incl. sticky bit for group).
$ find /var/www -type f -exec chmod 2660 {} \;

Agora tudo deve ficar bem para qualquer coisa que você execute com nginx, PHP e php-fpm e que esteja abaixo de /var/www .

    
por 16.02.2014 / 19:44
0

Tente alterar as permissões do diretório de onde você exibe seus arquivos para drwx-x-x (isso é 711). Desta forma, o servidor web será capaz de "cd" para este diretório e ler o arquivo php (desde que tenha permissões de leitura para ele)

    
por 17.02.2014 / 11:25