Nginx 不会将 _SERVER["DOCUMENT_ROOT"] 发送到 PHP-fpm

Nginx 不会将 _SERVER["DOCUMENT_ROOT"] 发送到 PHP-fpm

这是我的 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;
}

几乎该网站都可以加载,因为在这个配置文件中 / 的位置也设置为 /var/www。

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

当我使用 phpinfo() 并读取 PHP 变量表时,我注意到了这一点:

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

其他变量(大多数在 nginx.conf 中配置)如服务器名称、脚本文件名等都已发送到 php。因此,nginx 不会将此变量发送到 PHP。我该怎么办?

我正在使用 PHP 5.3.8 和 nginx 0.8

答案1

$document_root 由 root 指令设置。php 位置中的“root html;”行将 $document_root 设置为 <nginx prefix>/html。查看https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/#root-inside-location-block看看如何在服务器上下文中设置根。它应该看起来像这样:

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;
  }
}

答案2

我正在使用 nginx 1.0.6,这是我的 fastcgi_params 中的内容:

fastcgi_param  DOCUMENT_ROOT      $document_root;

不确定这是否会对 0.8 有帮助,但如果没有,更新 nginx 将会有所帮助。

相关内容