nginx fastcgi “Script primário desconhecido” ao configurar userdir

10

Eu odeio configurar o nginx. É tão complicado. Como faço para que o PHP funcione nos meus diretórios? Aqui está a parte relevante do meu nginx.conf:

    location ~ ^/~(.+?)(/.*)?$ {
        autoindex on;
        autoindex_exact_size off;
        alias /home/$1/public_html$2;

        location ~ \.php {
            include /etc/nginx/fastcgi.conf;
            fastcgi_intercept_errors on;
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index index.php;
        }
    }

Isso me dá o erro: FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream no log de erros do nginx.

Aqui está o meu /etc/nginx/fastcgi.conf :

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

Estou assumindo que o nginx não está resolvendo o nome do script corretamente. Eu odeio ter que dizer ao nginx onde procurar no meu sistema de arquivos, escrevendo regexes customizados para o que deve ser construído (ou pelo menos padronizado e documentado).

    
por nnyby 18.08.2012 / 22:51

3 respostas

8

O problema é que no seu fastcgi.conf você define SCRIPT_FILENAME as $document_root$fastcgi_script_name; mas depois usa o alias direcive para definir o caminho.

Você deve atualizar seu SCRIPT_FILENAME para usar $request_filename

Você também pode voltar para o local aninhado, se preferir. Se você ainda receber esse erro depois, eu documentei todas as possibilidades aqui: link

Por favor, verifique isso, pois pode haver várias outras causas.

    
por 21.08.2012 / 16:27
4

Quando você define redirecionamentos, aliases e Você usa o fastcgi o conf do seu site no nginx Você pode tentar isso para deixá-los trabalhar:

Mudança:

location ~ \.php$ {
...
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
...
}


Into:

location ~ \.php$ {
...
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param REQUEST_URI $uri?$args;
...
}

Se isso não funcionar, tente usar como foi dito acima sem o REQUEST_URI, então será:

location ~ \.php$ {
...
fastcgi_param SCRIPT_FILENAME $request_filename;
...
}

    
por 06.07.2013 / 14:21
2

Tente usar um bloco location separado para scripts PHP nos userdirs. Isso não precisa ser aninhado.

location ~ ^/~([^/]+)/(.+\.php)$ {
    alias /home/$1/public_html/$2;
    include /etc/nginx/fastcgi.conf;
    fastcgi_intercept_errors on;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
}
    
por 18.08.2012 / 22:56