nginx + php-fpm 服务器中的 php 页面无法加载

nginx + php-fpm 服务器中的 php 页面无法加载

我已经在 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

  • 首先,你有不同rootlocation /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 池定义吗?

相关内容