当前位置 主页 > 服务器问题 > nginx问题汇总 >

    nginx调用php-fpm出错解决方法和nginx配置详解

    栏目:nginx问题汇总 时间:2018-11-29 16:56

    这篇文章介绍了nginx调用php-fpm出错的解决方法,最后给出了nginx配置方法,需要的朋友可以参考下

    装完了nginx和php-5.5,配置好了nginx调用php后,就开始启动php-fpm。

    使用下面的命令
    复制代码 代码如下:
    /usr/local/php/sbin/php-fpm

    就可以启动了。

    在nginx的目录中创建个php的检测脚本index.php

    结果在打开http://localhost/index.php

    悲剧的发现居然无法打开 。查看日志文件,看了下报错原因
    复制代码 代码如下:
    2013/07/01 22:34:26 [error] 3214#0: *64 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 192.168.168.19, server: localhost, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "192.168.168.140"

    查看下端口 。看到php-fpm的9000端口已经打开了,说明php-fpm是没什么问题的,问题出在了nginx上了。可能是我的配置文件有问题。

    找到nginx加载php配置的那块。另外参考了下网上nginx的配置文件。

    在第69行有一个调用脚本路径
    复制代码 代码如下:
    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

    我把路径改下,改成下面的就可以了。
    复制代码 代码如下:
     fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

    http://localhost/index.php

    可以出现php的版本信息了。

    大家还可以参考下面的配置方法

    php-fpm不用再依赖其它的fastcgi启动器,比如lighttpd的spawn-fcgi。
    php-fpm的使用非常方便,配置都是在php-fpm.ini的文件内
    而启动,重启都可以从php/sbin/php-fpm中进行
    更方便的是修改php.ini后可以直接使用php-fpm reload进行加载 无需杀掉进程就可以完成php.ini的修改加载
    结果显示使用php-fpm可以使php有不小的性能提升
    php-fpm控制的进程.cpu回收的速度比较慢.内存分配的很均匀
    而spawn-cgi控制的进程CPU下降的很快.而内存分配的比较不均匀.
    有很多进程似乎未分配到,而另外一些却占用很高.
    可能是由于进程任务分配的不均匀导致的.而这也导致了总体响应速度的下降
    而php-fpm合理的分配.导致总体响应的提到以及任务的平均
    使用php-fpm需要在php源码上打补丁,然后重新编译php

    一.下载php-fpm
    wget http://cn.php.net/get/php-5.2.8.tar.gz/from/www.php.net/mirror
    wget http://php-fpm.anight.org/downloads/head/php-5.2.8-fpm-0.5.10.diff.gz
    与php-5.2.9在同一级目录
    gzip -cd php-5.2.8-fpm-0.5.10.diff.gz | patch -d php-5.2.9 -p1
    补丁打好以后,编译php的时候增加了下面几个参数:
    –enable-fpm 激活fastcgi模式的fpm支持
    –with-fpm-conf php-fpm的配置文件(默认是PREFIX/etc/php-fpm.conf)
    –with-fpm-log php-fpm的日志文件(默认是PREFIX/logs/php-fpm.log)
    –with-fpm-pid php-fpm的pid文件(默认是PREFIX/logs/php-fpm.pid)
    ./configure --prefix=/EBS/php \
    --with-config-file-path=/EBS/php/etc \
    --enable-fastcgi \
    --enable-fpm \
    --OTHERS
    注:--enable-fastcgi \ 需要在--enable-fpm \的前面,否则,fpm不能编译上。

    二.编译好php后,修改配置文件

    vi /EBS/php/etc/php-fpm.conf
    需要注意下面几处配置
    <value name="listen_address">127.0.0.1:9000</value>
    这个表示php的fastcgi进程监听的ip地址以及端口