Erro "Acesso negado" ao Nginx / PHP-FPM

14

Estou tentando configurar um servidor Ubuntu (12.04) recém-instalado, mas não consigo obter arquivos PHP rodando o php-fpm. Não importa o que eu faça, sempre recebo um "Acesso negado". página (texto simples, não html ou qualquer coisa).

Pacotes instalados:

nginx
nginx-common
nginx-full
php5
php5-cli
php5-common
php5-fpm

Detalhes de configuração:

PHP-FPM:

user = www-data
group = www-data
listen = /var/run/php5-fpm.sock

Nginx:

user www-data;
worker_processes 3;
events { worker_connections 1024; }

Domínio padrão / teste:

server {
    listen       80;
    server_name  localhost;
    root         /extra/htdocs/default;
    index        index.html index.php

    access_log   /extra/logs/default/access.log;
    error_log    /extra/logs/default/error.log;

    location / {
        try_files  $uri $uri/ /index.html;
    }

    location ~ \.php
    {
        fastcgi_split_path_info  ^(.+\.php)(/.+)$;

        include fastcgi_params;

        fastcgi_index   index.php;
        fastcgi_pass    unix:/var/run/php5-fpm.sock;
        fastcgi_param   PATH_INFO         $fastcgi_path_info;
        fastcgi_param   PATH_TRANSLATED   $document_root$fastcgi_path_info;
        fastcgi_param   SCRIPT_FILENAME   $document_root$fastcgi_script_name;
    }
}

/extra/htdocs/default/index.php:

<?php
phpinfo();

Tudo o resto é padrão. Os logs Nginx e php-fpm não mostram erros. No entanto, quando carrego http://<server-ip>/index.php, recebo a página "Acesso negado".

Solução de problemas:

  • O arquivo index.html funciona bem. Portanto, deve ser php-fpm ou a ligação fastcgi entre Nginx e php-fpm.
  • Eu configurei a propriedade (usuário e grupo) de todo o /extradiretório como www-datae propriedade como 777, apenas para ter certeza. Portanto, certamente não é um problema de permissões
  • Não é o problema security.limit_extensions que eu vejo muito: por padrão, é definido como .php, que é exatamente o que estou solicitando. Eu defini explicitamente para .php .html, com o mesmo resultado.

Estou realmente cansado disso, já instalei essa configuração duas vezes (embora em máquinas OSX) e tudo funcionou perfeitamente. Há algo que eu estou negligenciando?

O conteúdo do log:

O log de erros do Nginx está vazio.

Log de acesso ao Nginx (ip removido):

<ip> - - [17/Jul/2012:11:21:25 +0200] "GET /favicon.ico HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11"
<ip> - - [17/Jul/2012:11:21:28 +0200] "GET /index.php HTTP/1.1" 403 46 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11"
<ip> - - [17/Jul/2012:11:21:34 +0200] "-" 400 0 "-" "-"

log php-fpm:

[17-Jul-2012 10:44:14] NOTICE: fpm is running, pid 4969
[17-Jul-2012 10:44:14] NOTICE: ready to handle connections
Peter Kruithof
fonte

Respostas:

33

Finalmente consertei.

O culpado foi esta linha na minha configuração:

fastcgi_param   PATH_TRANSLATED     $document_root$fastcgi_path_info;

Se eu comentei essa linha, tudo funcionou bem. No entanto, eu vi isso em quase todos os posts que li sobre as configurações do Nginx, por isso me incomodou. Ao examinar minhas configurações pela milionésima vez, vi que cgi.fix_pathinfo(in php.ini) estava definido como 0, onde deveria ter sido 1. O valor padrão que o PHP usa também é 1, então devo ter alterado isso nas minhas horas de depuração, porque lembre-se de ler sobre esse valor e achei que estava definido corretamente.

De qualquer forma, talvez isso ajude alguém no Google a pesquisar esse problema.

Peter Kruithof
fonte
5
Obrigado por compartilhar a solução. É recomendável não confiar nos tutoriais, pois esses tutoriais podem conter configurações não seguras. Essas configurações ainda podem funcionar corretamente.
pothi Kalimuthu
Obrigado pelo link, me deparei com isso algumas vezes e apliquei essas instruções. O erro provavelmente foi meu na minha raiva de depuração (após x horas você começa a perder o controle de algumas das coisas que alterou).
Peter Kruithof
O meu era um chownproblema.
Jürgen Paul
Muito obrigado. Estou trabalhando nesse problema há horas e cgi.fix_pathinfodefinido como 0 (configuração padrão) foi o problema.
Mauvis Ledford
2
cgi.fix_pathinfo = 0é recomendado por muitos tutoriais porque ajuda a mitigar vulnerabilidades, especificamente vulnerabilidades executando código php através de arquivos arbitrários. Portanto, se você definir isso como 1, verifique se você sabe o que está fazendo ou especifique outras atenuações para compensar isso. Encontrei este post com uma boa explicação sobre o assunto: nealpoole.com/blog/2011/04/…
MikeD 23/05/19