这是我的 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 将会有所帮助。