我已经在 CentOS 6 系统(托管在 Amazon EC2 上)中安装了 nginx 服务器和 php-fpm,具体说明如下:
http://emka.web.id/linux/centos-linux/2011/installing-nginx-with-php-and-php-fpm/
当我访问由 Amazon 提供的公共 DNS 时,会加载静态 html(index.html),因此 nginx 可以正常工作,但是当我尝试在与“index.php 或 hello.php”相同的目录中加载 php 页面时,错误页面会显示以下消息:“您正在寻找的页面暂时不可用。请稍后再试。” 当我运行不带参数的 php-fpm 并再次尝试加载 php 页面时,不会向我发送该页面,而是显示一条文本消息:“未指定输入文件”。
文件所在的默认目录是 /usr/share/nginx/html
我认为我的配置有问题,但我不知道是 php 还是 nginx conf 文件中的问题。/etc/nginx/nginx.conf 中有几行我认为最相关的内容:
#
# The default server
#
server {
listen 80;
server_name _;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# 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 /scripts$fastcgi_script_name;
include fastcgi_params;
}
顺便说一句,所有安装操作以及“nginx start”和“php-fpm”都是由 root 执行的,因为我只能使用该超级用户通过 SSH 访问。我不知道这与我的问题有关,但我知道建议使用具有 sudo 的普通用户。
答案1
- 首先,你有不同
root
的location /
location ~ \.php$
- 其次,不要对路径值进行硬编码
SCRIPT_FILENAME
。
“未指定输入文件”意味着 PHP 无法找到 Nginx 要求其查找的文件。因此,SCRIPT_FILENAME
在 中定义fastcgi_params
:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
(或者fastcgi.conf
改为包含)
并将你的 PHP 位置更改为如下内容:
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
}
它会起作用。
答案2
也许尝试在 fastcgi_param 中使用完整路径(这是我的做法):SCRIPT_FILENAME /var/www/scripts/$fastcgi_script_name
另外,php-fpm 和 nginx 日志中有什么?您可以添加您的 fpm 池定义吗?