1 votes

Nginx n'envoie pas _SERVER["DOCUMENT_ROOT"] à PHP-fpm

Ceci fait partie de mon fichier de configuration nginx :

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME /var/www/$fastcgi_script_name;
    include        fastcgi_params;
}

Le site web se charge presque car l'emplacement de / est également défini à /var/www dans ce fichier de configuration.

location / {
    root   /var/www;
    index  index.php index.html index.htm;
}

Lorsque j'utilise phpinfo() et que je lis le tableau des variables PHP, j'ai remarqué ceci :

_SERVER["DOCUMENT_ROOT"]    /usr/share/nginx/html

D'autres variables (la plupart d'entre elles configurées dans nginx.conf) comme le nom du serveur, script nom de fichier, etc, ont été envoyées à php. Donc, nginx n'envoie pas cette variable à PHP. Ce que je dois faire ?

J'utilise PHP 5.3.8 et nginx 0.8.

0 votes

Déplacez votre directive "root" en dehors des blocs d'emplacement - elle doit se trouver dans le bloc serveur (et vérifiez que vous avez la ligne suivante fastcgi_param DOCUMENT_ROOT $document_root; dans votre fichier fastcgi_parms)

0 votes

Il se trouve déjà à l'intérieur du bloc du serveur par défaut.

5voto

kolbyjack Points 7644

$document_root est défini par la directive root. La ligne 'root html;' dans l'emplacement php définit $document_root à <nginx prefix>/html. Jetez un coup d'œil à https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/#root-inside-location-block pour voir comment vous devez définir votre racine dans le contexte du serveur. Cela devrait ressembler à quelque chose comme ceci :

server {
  root /var/www;
  index index.php index.html index.htm;

  location ~ \.php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        fastcgi_params;
  }
}

1voto

Sergey Vlasov Points 2739

J'utilise nginx 1.0.6, et ceci se trouve dans mon fastcgi_params :

fastcgi_param  DOCUMENT_ROOT      $document_root;

Je ne sais pas si cela vous aidera sous la version 0.8, mais la mise à jour de nginx vous aidera sinon.

0 votes

Pas vraiment, c'est la même chose dans nginx 0.8

0 votes

@ianenri : Cela fonctionne parfaitement sur la version 1.0. Il pourrait s'agir d'un bug dans la version 0.8. Quoi qu'il en soit, c'est ainsi que vous l'avez défini. Vous pouvez la définir manuellement plutôt que via la variable, cela devrait résoudre votre problème.

0 votes

Et où dois-je placer cette variable $document_root ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X