Je ne remarque aucune différence si dans mon fichier de configuration je mets
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Ou:
fastcgi_param SCRIPT_FILENAME $request_filename;
Que font-ils respectivement? L'un des deux est-il meilleur que l'autre?
Merci d'avance.
Voici ce que dit la documentation:
Cette variable est égale au chemin d'accès au fichier de la requête en cours, formé à partir des directives racine ou alias et de la requête URI;
Cette variable est égale à la valeur de la directive root pour la requête en cours;
Cette variable est égale à la demande d'URI ou, si si l'URI se termine par une barre oblique, alors la demande d'URI plus le nom du fichier d'index donné par fastcgi_index. Il est possible d'utiliser cette variable à la place de SCRIPT_FILENAME et PATH_TRANSLATED, utilisées notamment pour déterminer le nom du script en PHP.
Comme écrit ici, il y a au moins une différence lors de l'utilisation de fastcgi_index ou fastcgi_split_path_info. Peut-être qu'il y en a plus ... c'est ce que je sais en ce moment.
Vous obtenez la demande /info/
et ont la configuration suivante:
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;
SCRIPT_FILENAME
serait égal à /home/www/scripts/php/info/index.php
, mais en utilisant $request_filename
ce serait juste /home/www/scripts/php/info/
.
La configuration de fastcgi_split_path_info
est également important. Voir ici pour plus d'aide: http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_split_path_info
J'ai recommandé d'utiliser $request_filename
pour SCRIPT_FILENAME
.
root
$document_root$fastcgi_script_name
est égal à $request_filename
.
alias
$document_root$fastcgi_script_name
renverra le mauvais chemin, car $fastcgi_script_name
est le chemin de l'URL, et non le chemin vers $document_root
.
Si vous avez 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;
}
}
/api/testing.php
:$document_root$fastcgi_script_name
== /app/www//api/testing.php
$request_filename
== /app/www/testing.php
/api/
:$document_root$fastcgi_script_name
== /app/www//api/index.php
$request_filename
== /app/www/index.php
Et si vous utilisez $request_filename
, vous devez définir l'index à l'aide de la directive index
, fastcgi_index
ne fonctionnera pas.
Je suppose que ces lignes ont été tirées du fichier 'fastcgi_params' ..
Fondamentalement, vous n'obtenez aucune erreur en ce qui concerne SCRIPT_FILENAME
car il est déjà défini lorsque vous avez défini votre directive racine dans votre fichier vhost. Donc, sauf si vous l'avez défini explicitement dans votre fichier vhost à l'aide de fastcgi_param
la valeur de SCRIPT_FILENAME
serait tiré de la directive racine .. Mais UN POINT IMPORTANT ICI. Il y a une autre variable dont nginx a besoin pour envoyer les requêtes au serveur php qui est $fastcgi_script_name
et vous devez bien le définir afin d'éviter les URL répétitives et les erreurs avec les uri qui se terminent par une barre oblique.
Conclusion :
Pour que tout fonctionne super bien, tout le monde devrait définir SCRIPT_FILENAME
explicitement dans le fichier 'fastcgi_params' situé dans le dossier/etc/nginx ou facilement dans le vhost de votre site situé dans le dossier sites-disponibles en incluant la ligne suivante dans le bloc d'emplacement php:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
ou inclus dans le fichier 'fastcgi_params' comme vous l'avez écrit ci-dessus, de toute façon c'est la même chose. Pour plus d'informations pour connecter ngnix à PHP-FPM, allez sur:
https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/
J'espère que cela aiderait n'importe qui à l'avenir 'cuz il m'a fallu beaucoup de temps pour le comprendre ..