Nginx $ document_root $ fastcgi_script_name vs $ request_filename

13

Eu não consigo notar nenhuma diferença se no meu arquivo de configuração eu definir

 fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

Ou:

 fastcgi_param  SCRIPT_FILENAME    $request_filename;

O que eles fazem respectivamente? Um dos dois é melhor que o outro?

Obrigado antecipadamente.

    
por MultiformeIngegno 10.01.2013 / 01:34

3 respostas

22

Veja o que a documentação diz:

$ request_filename

This variable is equal to path to the file for the current request, formed from directives root or alias and URI request;

$ document_root

This variable is equal to the value of directive root for the current request;

$ fastcgi_script_name

This variable is equal to the URI request or, if if the URI concludes with a forward slash, then the URI request plus the name of the index file given by fastcgi_index. It is possible to use this variable in place of both SCRIPT_FILENAME and PATH_TRANSLATED, utilized, in particular, for determining the name of the script in PHP.

Como escrito aqui, há pelo menos uma diferença ao usar fastcgi_index ou fastcgi_split_path_info . Talvez haja mais ... é disso que eu sei agora.

Exemplo

Você recebe a solicitação /info/ e tem a seguinte configuração:

fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /home/www/scripts/php$fastcgi_script_name;

SCRIPT_FILENAME seria igual a /home/www/scripts/php/info/index.php , mas usando $request_filename seria apenas /home/www/scripts/php/info/ .

A configuração de fastcgi_split_path_info também é importante. Veja aqui para mais ajuda: link

    
por 04.04.2013 / 11:32
2

Eu acho que essas linhas foram tiradas do arquivo 'fastcgi_params'.

Basicamente, você não está recebendo nenhum erro quando se trata de SCRIPT_FILENAME , porque ele já está definido quando você definiu sua diretiva raiz em seu arquivo vhost. Portanto, a menos que você o tenha definido explicitamente em seu arquivo vhost usando fastcgi_param , o valor de SCRIPT_FILENAME seria retirado da diretiva raiz. Mas UM PONTO IMPORTANTE AQUI. Existe outra variável que o nginx precisa para enviar os pedidos para o servidor php que é $fastcgi_script_name e você tem que defini-lo bem para evitar URLs repetitivos e erros com uri's que terminam com barra.

Conclusão :

Para que tudo funcione muito bem, todos devem definir SCRIPT_FILENAME explicitamente no arquivo 'fastcgi_params' localizado na pasta / etc / nginx ou facilmente no vhost do seu site localizado na pasta sites-available, incluindo a seguinte linha o bloco de localização do php:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

ou incluído no arquivo 'fastcgi_params' como você escreveu acima, de qualquer forma é o mesmo .. Para mais informações sobre como conectar o ngnix ao PHP-FPM, vá para:

link

Espero que isso ajude alguém no futuro, pois levei muito tempo para descobrir isso.

    
por 22.12.2013 / 11:34
2

Se você estiver usando a root directive

$document_root$fastcgi_script_name é igual a $request_filename .

Se você usa a alias directive

$document_root$fastcgi_script_name retornará o caminho errado.

Exemplo

Se você tiver config

location /api/ {
    index  index.php index.html index.htm;
    alias /app/www/;
    location ~* "\.php$" {
        try_files      $uri =404;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        # fastcgi_param  SCRIPT_FILENAME  $request_filename;
    }
}

Solicitar /api/testing.php :

  • $document_root$fastcgi_script_name == /app/www//api/testing.php
  • $request_filename == /app/www/testing.php

Solicitar /api/ :

  • $document_root$fastcgi_script_name == /app/www//api/index.php
  • $request_filename == /app/www/index.php

E se você usar $request_filename , defina o índice usando index directive, fastcgi_index não funcionará.

TLDR

Eu recomendei usar $request_filename para SCRIPT_FILENAME .

    
por 19.07.2018 / 05:08