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.
la source
fastcgi_split_path_info
besoin d'un ajustement. La réponse de Steely Wing semble être fortement basée sur l'expérience et non sur la documentation.fastcgi_split_path_info
pour exclure mon préfixe d'alias en le mettant en dehors des deux captures, mais cela ne semblait pas avoir d'effet. Alors que le passage$request_filename
queSCRIPT_FILENAME
fonctionne comme un charme, peu importe si oui ou non un alias est impliqué.SCRIPT_FILENAME
en premier lieu, lorsque$request_filename
contient le nom de fichier réel résolu, sans aucun supplément ajouté. L'exemple ci-dessus est en fait incorrect, car$request_filename
il contient en fait un nom de fichier plutôt qu'un simple chemin d'accès, même lorsque ce fichier n'a pas été demandé explicitement. C'est du moins ma conclusion d'hier.TLDR
J'ai recommandé une utilisation
$request_filename
pourSCRIPT_FILENAME
.Si vous utilisez la
root
directive$document_root$fastcgi_script_name
est égal à$request_filename
.Si vous utilisez la
alias
directive$document_root$fastcgi_script_name
renverra le mauvais chemin, car$fastcgi_script_name
c'est le chemin de l'URL, pas le chemin auquel se rapporter$document_root
.Exemple
Si vous avez config
Demande
/api/testing.php
:$document_root$fastcgi_script_name
==/app/www//api/testing.php
$request_filename
==/app/www/testing.php
Demande
/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 en utilisant laindex
directive,fastcgi_index
ne fonctionnera pas.la source
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, à moins que vous ne l'ayez défini explicitement dans votre fichier vhost en utilisantfastcgi_param
la valeur de, celaSCRIPT_FILENAME
proviendrait 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 soit 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: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 ..
la source