zoukankan      html  css  js  c++  java
  • nginx调用php-fpm出错解决方法和nginx配置详解

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

    使用下面的命令


    复制代码 代码如下:


    /usr/local/php/sbin/php-fpm


    就可以启动了。

    在nginx的目录中创建个php的检测脚本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;


    可以出现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
    wget
    与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>127.0.0.1:9000</value>
    这个表示php的fastcgi进程监听的ip地址以及端口
    <value>nobody</value>
    <value>nobody</value>
    表示php的fastcgi进程以什么用户以及用户组来运行,默认该行是注释掉的,需要打开
    <value>0</value>
    是否显示php错误信息
    <value>5</value>
    最大的子进程数目
    运行php-fpm:
    php-fpm用一个程序来控制fastcgi进程,这个文件在$PREFIX/sbin/php-fpm
    /usr/local/php/sbin/php-fpm
    该程序有如下参数:
    start 启动php的fastcgi进程
    stop 强制终止php的fastcgi进程
    quit 平滑终止php的fastcgi进程
    restart 重启php的fastcgi进程
    reload 重新加载php的php.ini
    logrotate 重新启用log文件
    也就是说,在修改了php.ini之后,我们可以使用
    /usr/local/php/sbin/php-fpm reload
    这样,就保持了在php的fastcgi进程持续运行的状态下,又重新加载了php.ini。


    复制代码 代码如下:


    user www www;
    worker_processes 10;
    error_log logs/error.log notice;
    pid logs/nginx.pid;
    #Specifies the value for maximum file descriptors that can be opened by this process.
    worker_rlimit_nofile 51200;
    events
    {
    use epoll;
    worker_connections 51200;
    }
    http
    {
    include mime.types;
    default_type application/octet-stream;
    charset gb2312;
    server_names_hash_bucket_size 128;
    #sendfile on;
    #tcp_nopush on;
    keepalive_timeout 60;
    tcp_nodelay on;
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 8k;
    gzip_http_version 1.1;
    gzip_types text/plain application/x-javascript text/css text/html application/xml;
    {
    listen 80;
    server_name 192.168.1.2;
    index index.html index.htm index.php;
    root /EBS/www;
    if (-d $request_filename)
    {
    rewrite ^/(.*)([^/])$ $host/$1$2/ permanent;
    }
    location ~ .*.php?$
    {
    include fcgi.conf

    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    }
    log_format access '$remote_addr - $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent "$http_referer" '
    '"$http_user_agent" $http_x_forwarded_for';
    access_log logs/access.log access;
    }
    }

  • 相关阅读:
    poj 1113 Wall 凸包的应用
    NYOJ 78 圈水池 (入门级凸包)
    Monotone Chain Convex Hull(单调链凸包)
    poj Sudoku(数独) DFS
    poj 3009 Curling 2.0(dfs)
    poj 3083 Children of the Candy Corn
    Python join()方法
    通过FISH和下一代测序检测肺腺癌ALK基因融合比较
    华大病原微生物检测
    NGS检测ALK融合大起底--转载
  • 原文地址:https://www.cnblogs.com/xiaoleiel/p/8334695.html
Copyright © 2011-2022 走看看