Je possède plusieurs sites PHP que je veux séparer en termes de permissions. J'ai donc créé un nouvel utilisateur et configuré un pool PHP pour ces utilisateurs. Considérez la configuration ci-dessous :
- PHP-FPM fonctionne en tant qu'utilisateur
php
- nginx fonctionne en tant qu'utilisateur
nginx
- Le webroot est
/srv/http
, accessible à la fois par php et nginx. - Le fichier
/srv/http/index.php
est lisible par php, mais pas lisible par nginx. - Le fichier
fastcgi_stuff
contient des paramètres fastcgi de base pour définir les en-têtes, définir le backend, etc. Supposons que le webroot pour les fichiers statiques et les fichiers PHP soit le même.
Le fichier nginx.conf ci-dessous contient les éléments essentiels de cette configuration, il est placé dans une directive server
:
server_name example.com;
root /srv/http;
index index.php;
location ~ \.php$ {
include fastcgi_stuff;
}
Si je demande http://example.com/
avec la configuration ci-dessus, la page se charge comme prévu. Pour http://example.com/does.not.exist
, j'obtiens une erreur 404 comme prévu.
Pour empêcher de transmettre des fichiers inexistants à PHP-FPM, j'ai essayé d'ajouter l'une des lignes ci-dessous :
try_files $uri =404;
if ( !-e $request_filename ){ return 404; }
Les deux ne fonctionnent pas comme annoncé, ils essaient d'ouvrir les fichiers au lieu de vérifier leur existence en effectuant un appel stat()
. J'ai confirmé cela en vérifiant le code source et en exécutant strace
sur un processus de travail.
C'est un cas basique sur lequel j'avais des difficultés, un autre cas est lorsque je cache l'extension et que je mets donc un try_files $uri.php =404
dans le bloc de localisation. Des suggestions ?