nginx fastcgi reescrita: script primário desconhecido

1

Tenho a seguinte configuração do nginx:

  location / {
      try_files $uri $uri/ index.html =404;

      if (!-e $request_filename) {
        rewrite ^/(.+)$ index.php?url=$1 last;
      }
  }


 location ~ .php$ {
    # protection from known vulnerability
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    include fastcgi_params;
    fastcgi_pass   unix:/var/run/php5-fpm.sock;
    fastcgi_index  index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 }

( fastcgi_params são padrões do pacote Debian)

funciona para o pedido / , no entanto, quando o pedido é reescrito, o arquivo principal não é encontrado:

A solicitação

é /contact , que deve ser reescrita para /index.php?url=contact

 *104 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 10.0.0.1, server: localhost, request: "GET /contact HTTP/1.0", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "localhost:8080"

Não consigo obter de logs o que é realmente fastcgi tentando carregar, qual caminho?

    
por Tombart 10.04.2014 / 12:51

2 respostas

4

Observe que index.php e /index.php são URIs diferentes. Você esqueceu barras em suas reescritas.

    
por 10.04.2014 / 14:54
2

Esta é uma maneira melhor de implementar a mesma funcionalidade:

location / {
    try_files $uri $uri/ @rewrite;
}

location @rewrite {
    rewrite ^/(.+)$ /index.php?url=$1 last;
}

e depois o seu bloco de localização do PHP como na sua configuração.

try_files verifica primeiro se o arquivo correspondente a $ uri existe, então um diretório e, se nenhum deles existir, usa o local de reescrita, que executa o script.

O motivo mais provável de sua configuração não estar funcionando foi o / ausente do caminho de script de reconfiguração. Enfim, essa configuração é mais simples é a preferida com o nginx.

    
por 10.04.2014 / 13:53

Tags