zoukankan      html  css  js  c++  java
  • [转]nginx phpfpm安装配置

    nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。

    nginx一般是把请求发fastcgi管理进程处理,fascgi管理进程选择cgi子进程处理结果并返回被nginx

    本文以php-fpm为例介绍如何使nginx支持PHP

    一、编译安装php-fpm

    什么是PHP-FPM

    PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的,可以在 http://php-fpm.org/download下载得到.

    PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。

    新版PHP已经集成php-fpm了,不再是第三方的包了,推荐使用。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多有点,所以被PHP官方收录了。在./configure的时候带 –enable-fpm参数即可开启PHP-FPM,其它参数都是配置php的,具体选项含义可以查看这里

    安装前准备
    centos下执行

    yum -y install gcc automake autoconf libtool make
     
    yum -y install gcc gcc-c++ glibc
     
    yum -y install libmcrypt-devel mhash-devel libxslt-devel\
     libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel\
     zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel\
     ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel\
     krb5 krb5-devel libidn libidn-devel openssl openssl-devel

    在安装php的时候竟然提示"configure: error: mcrypt.h not found. Please reinstall libmcrypt",意思是,没有查找到mcrytp.h,需要安装libcrytp,以前安装了n次都没有问题的,在网上找了一个解决办法.

    wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/attic/libmcrypt/libmcrypt-2.5.7.tar.gz

    tar -zxvf libmcrypt-2.5.7.tar.gz
    cd libmcrypt-2.5.7
    mkdir -p /usr/local/libmcrytp
    ./configure prefix=/usr/local/libmcrytp/
    make
    make install

    然后再安装PHP

    新版php-fpm安装(推荐安装方式)

    wget http://cn2.php.net/distributions/php-5.4.7.tar.gz
    tar zvxf php-5.4.7.tar.gz
    cd php-5.4.7 ./configure --prefix=/usr/local/php  --enable-fpm --with-mcrypt=/usr/local/libmcrytp --with-zlib\
     --enable-mbstring --disable-pdo --with-curl --disable-debug  --disable-rpath\
     --enable-inline-optimization --with-bz2  --with-zlib --enable-sockets\
     --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex\
     --with-mhash --enable-zip --with-pcre-regex --with-mysql\
     --with-gd --with-jpeg
     
    make all install

    旧版手动打补丁php-fpm安装

    wget http://cn2.php.net/get/php-5.2.17.tar.gz
    wget http://php-fpm.org/downloads/php-5.2.17-fpm-0.5.14.diff.gz
     
    tar zvxf php-5.2.17.tar.gz
    gzip -cd php-5.2.17-fpm-0.5.14.diff.gz | patch -d php-5.2.17 -p1
    cd php-5.2.17
    ./configure --prefix=/usr/local/php -with-config-file-path=/usr/local/php/etc\
     -with-mysql=/usr/local/mysql\
     -with-mysqli=/usr/local/mysql/bin/mysql_config -with-openssl -enable-fpm -enable-mbstring\
     -with-freetype-dir -with-jpeg-dir -with-png-dir -with-zlib-dir -with-libxml-dir=/usr -enable-xml\
     -with-mhash -with-mcrypt -enable-pcntl -enable-sockets  -with-bz2 -with-curl -with-curlwrappers\
     -enable-mbregex -with-gd -enable-gd-native-ttf -enable-zip -enable-soap -with-iconv -enable-bcmath\
     -enable-shmop -enable-sysvsem -enable-inline-optimization -with-ldap -with-ldap-sasl -enable-pdo\
     -with-pdo-mysql
     
    make all install

    以上两种方式都可以安装php-fpm,安装后内容放在/usr/local/php目录下

    以上就完成了php-fpm的安装。

    下面是对php-fpm运行用户进行设置

    cd /usr/local/php
    cp etc/php-fpm.conf.default etc/php-fpm.conf
    vi etc/php-fpm.conf

    修改
    user = www-data
    group = www-data

    二、编译安装nginx

    然后按照http://www.nginx.cn/install 安装nginx

    三、修改nginx配置文件以支持php-fpm

    nginx安装完成后,修改nginx配置文件为,nginx.conf

    其中server段增加如下配置,注意标红内容配置,否则会出现No input file specified.错误

    # 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 $document_root$fastcgi_script_name;
    include fastcgi_params;
    }

    四、创建测试php文件

    创建php文件

    在/usr/local/nginx/html下创建index.php文件,输入如下内容

    <? echo phpinfo(); ?>

    五、启动服务

    启动php-fpm和nginx

    /usr/local/php/sbin/php-fpm (手动打补丁的启动方式/usr/local/php/sbin/php-fpm start)

    sudo /usr/local/nginx/nginx

    php-fpm关闭重启见文章结尾

    六、浏览器访问

    访问http://你的服务器ip/index.php,皆可以见到php信息了。

    安装php-fpm时可能遇到的错误:

    1. php configure时出错

    configure: error: XML configuration could not be found
    apt-get install libxml2 libxml2-dev  (ubuntu下)
    yum -y install libxml2 libxml2-devel(centos下)

    2. Please reinstall the BZip2 distribution

    wget http://www.bzip.org/1.0.5/bzip2-1.0.5.tar.gz
    tar -zxvf bzip2-1.0.5.tar.gz
    cd bzip2-1.0.5
    make
    make install
    3. php的配置文件中有一行--with-mysql=/usr。安装的时候提示:
    configure: error: Cannot find MySQL header files under yes.
    Note that the MySQL client library is not bundled anymore.

    这是由于安装mysql时没有安装mysql头文件,或者是路径指定不正确,php找不到mysql的头文件引起的错误提示。
    解决方法。
    (1.) 查看你的系统有没有安装mysql header
    find / -name mysql.h
    如果有。请指定--with-mysql=/跟你的正常路径。
    如果没有。请看下一步。
    (2.)redhat安装
    rpm -ivh MySQL-devel-4.1.12-1.i386.rpm
    (3.)ubuntu安装
    apt-get install libmysqlclient15-dev
    (4.)最后一步php的配置选项添加--with-mysql=/usr即可!
    4.No input file specified.

    location ~ \.php$ {
    root html;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    }

    5. 如果php configure时缺库,可以先安装库(ubuntu下)

    sudo apt-get install make bison flex gcc patch autoconf subversion locate
    sudo apt-get install libxml2-dev libbz2-dev libpcre3-dev libssl-dev zlib1g-dev libmcrypt-dev libmhash-dev libmhash2 libcurl4-openssl-dev libpq-dev libpq5 libsyck0-dev

    6. mcrypt.h not found. Please reinstall libmcrypt

    apt-get install libmcrypt-dev

    或者

    wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/attic/libmcrypt/libmcrypt-2.5.7.tar.gz

    tar -zxvf libmcrypt-2.5.7.tar.gz
    cd libmcrypt-2.5.7
    mkdir -p /usr/local/libmcrytp
    ./configure prefix=/usr/local/libmcrytp/
    make
    make install

    7. php-fpm 5.4.7 如何关闭 重启?

    php 5.4.7 下的php-fpm 不再支持 php-fpm 以前具有的 /usr/local/php/sbin/php-fpm (start|stop|reload)等命令,需要使用信号控制:

    master进程可以理解以下信号

    INT, TERM 立刻终止 QUIT 平滑终止 USR1 重新打开日志文件 USR2 平滑重载所有worker进程并重新载入配置和二进制模块

    示例:

    php-fpm 关闭:

    kill -INT `cat /usr/local/php/var/run/php-fpm.pid`

    php-fpm 重启:

    kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`

    查看php-fpm进程数:

    ps aux | grep -c php-fpm

  • 相关阅读:
    unsupported jsonb version number 123
    如何在MPlayer上支持RTSP
    TDengine 时序数据库的 ADO.Net Core 提供程序 Maikebing.EntityFrameworkCore.Taos
    如何使用IoTSharp对接ModBus?
    如何从源码启动和编译IoTSharp
    Asp.Net Core 自动适应Windows服务、Linux服务、手动启动时的内容路径的扩展方法
    MQTTnet 的Asp.Net Core 认证事件的扩展
    Asp.Net Core 中利用QuartzHostedService 实现 Quartz 注入依赖 (DI)
    The remote certificate is invalid according to the validation procedure 远程证书验证无效
    settings插拔式源码
  • 原文地址:https://www.cnblogs.com/sidesky/p/3080424.html
Copyright © 2011-2022 走看看