使用 nginx 配置 php-fpm 时出现问题

使用 nginx 配置 php-fpm 时出现问题

首先:我不是配置方面的专家。这对我来说很新,所以我提前道歉。

在工作中,我们有一台 Centos 服务器。之前在这里工作的人安装了 nginx。我们需要创建一个 php 网站,因此,显然,我需要设置 php 并使其与 nginx 一起工作。

长话短说,我不得不用新的 nginx 二进制文件替换它(因为旧版本没有 fast-cgi 编译),并且我不得不重新编译和安装 php(因为新版本有 fpm)。然后我费了好大劲才弄好配置文件,制作了这个 nginx.conf(不是所有文件)

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

并取消注释 php-fpm 中的某些参数(这里要详细说明,但重要的是组和用户是“php”)

我从来没能按照书中的说明启动 php-fpm

sudo /usr/sbin/php-fpm start

但在网上查了一下,我发现了这个

sudo /usr/local/sbin/php-fpm --fpm-config=/usr/local/etc/php-fpm.conf

我认为这是有效的

我重启了 nginx。但是...php 什么都没发生...我对 php 文件的调用(通过 Firefox)甚至没有出现在日志中(/opt/nginx/logs/error.log)

我真的真的很累,很迷茫...有人能帮帮我吗,拜托.... :(

提前致谢

答案1

首先检查 php-fpm 是否在监听 9000 端口:netstat -an | grep LISTEN | grep 9000 如果它返回类似以下内容:tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 然后 php-fpm 就可以正常工作了,你应该检查你的 nginx 配置。例如,检查你是否定义了正确的 server_name。它应该与你在浏览器中输入的相同。如果你使用 localhost 以外的其他 URL,请确保这些 URL 具有正确的 DNS 记录。我的 php-fpm 配置是:

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/somesite/htdocs$fastcgi_script_name;
        fastcgi_param  DOCUMENT_ROOT  /var/www/somesite/htdocs;
        include        /etc/nginx/fastcgi_params;
    }

此配置适用于我的许多站点。

答案2

我认为 php-fpm 和 fastcgi 是集成 nginx 和 PHP 的两种不同方式。我认为您需要使用其中一种方法。本 CentOS 指南应该可以让您大致了解使用 fastcgi 的方法。http://library.linode.com/web-servers/nginx/php-fastcgi/centos-5

我成功地按照他们图书馆中的一篇类似文章在 Ubuntu 上设置了 Nginx/fastcgi/PHP。

答案3

    location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
            include /etc/nginx/fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_pass localhost:9000;
    }

这对我在 nginx 0.8.54 上有效。“fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;”可能是您唯一需要更改的内容。它使用服务器配置中的“root /var/www/example.com/yoursite”指令。过去我曾遇到过它向我抛出错误,但只提供了一个白页。您通常可以在 /var/log/nginx/error.log 中看到错误。另外,您是否将 php-fpm 设置为在 TCP 端口或套接字上运行?检查您的 php-fpm.conf,我认为它默认为 TCP 端口 9000。 这个 nginx.org 页面为各种开源网络应用程序(wordpress、drupal 等)提供了一大堆默认配置。

相关内容