1. 安装依赖
    yum install perl* httpd-devel libxml2-devel openssl openssl-devel curl curl-devel libjpeg libjpeg-devel freetype freetype-devel libpng libpng-devel libxslt libxslt-devel pcre pcre-devel bzip2 bzip2-devel  httpd-devel libzip libzip-devel -y
  2. 获取安装包,解压后进入安装目录
    cd /usr/local/src
    
    wget https://www.php.net/distributions/php-7.2.13.tar.gz
    
    tar -zxvf php-7.2.13.tar.gz && cd php-7.2.13
  3. 生成makefile文件,如果遇到错误,一般是找不到对应的依赖,根据提示使用yum安装对应依赖即可
    ./configure --prefix=/usr/local/php --exec-prefix=/usr/local/php --bindir=/usr/local/php/bin --sbindir=/usr/local/php/sbin --includedir=/usr/local/php/include --libdir=/usr/local/php/lib/php --mandir=/usr/local/php/php/man --with-config-file-path=/usr/local/php/etc --with-mysql-sock=/var/lib/mysql/mysql.sock --with-mhash --with-openssl --with-mysqli=shared,mysqlnd --with-pdo-mysql=shared,mysqlnd --with-gd --with-jpeg-dir --with-png-dir --with-iconv --with-zlib --enable-zip --enable-inline-optimization --disable-debug --disable-rpath --enable-shared --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-mbregex --enable-mbstring --enable-ftp --enable-pcntl --enable-sockets --with-xmlrpc --enable-soap --without-pear --with-gettext --enable-session --with-curl --with-freetype-dir --enable-opcache --enable-fpm --with-fpm-user=www --with-fpm-group=www --without-gdbm --enable-fileinfo --with-apxs2=/usr/bin/apxs --disable-fileinfo
  4. 编译安装
    make -j4  && make install
  5. 建立软链接,测试是否安装成功
    ln -s /usr/local/php/sbin/php-fpm /usr/local/bin
    
    ln -s /usr/local/php/bin/php /usr/bin/php
    
    php -v
  6. 设置配置文件,启动php-fpm
    1,在php安装包的解压目录下将php.ini文件复制到php安装目录的etc目录下(这是在编译安装php时指定的配置目录)
    cp /usr/local/src/php-7.2.13/php.ini-production /usr/local/php/etc/php.ini
    
    2,在/usr/local/php/etc目录下新建php-fpm.conf配置文件,具体内容如下:
    
    [global]
    pid = /usr/local/php/var/run/php-fpm.pid  #指定php-fpm运行的pid文件路径
    error_log = /usr/local/php/var/log/php-fpm.log  #指定php-fpm运行的错误日志路径
    log_level = notice  #错误级别
    
    [www]
    listen = /tmp/php-cgi.sock   #这个地方在nginx.conf配置反向代理时很重要
    listen.backlog = 8192
    listen.allowed_clients = 127.0.0.1
    listen.owner = www
    listen.group = www
    listen.mode = 0666
    user = www
    group = www
    pm = dynamic  #指定php-fpm运行时动态管理子进程
    pm.status_path = /phpfpm_72_status
    pm.max_children = 300  #最大运行的子进程数
    pm.start_servers = 20 #以动态方式运行时初始创建的子进程数
    pm.min_spare_servers = 20  #以动态方式运行时最小空闲的子进程数
    pm.max_spare_servers = 300 #以动态方式运行时最大空闲的子进程数
    request_terminate_timeout = 100
    request_slowlog_timeout = 30
    slowlog = var/log/slow.log
    
    3,将php-fpm做成服务方式,在/etc/init.d目录下新建php-fpm的shell文件,内容如下:
    #! /bin/sh
    
    ### BEGIN INIT INFO
    # Provides:          php-fpm
    # Required-Start:    $remote_fs $network
    # Required-Stop:     $remote_fs $network
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: starts php-fpm
    # Description:       starts the PHP FastCGI Process Manager daemon
    ### END INIT INFO
    
    prefix=/usr/local/php #指定php安装的目录
    exec_prefix=${prefix}
    
    php_fpm_BIN=${exec_prefix}/sbin/php-fpm  #指定php-fpm的二进制启动文件
    php_fpm_CONF=${prefix}/etc/php-fpm.conf  #指定php-fpm的配置文件
    php_fpm_PID=${prefix}/var/run/php-fpm.pid #指定php-fpm的pid文件
    
    
    php_opts="--fpm-config $php_fpm_CONF --pid $php_fpm_PID"
    
    
    wait_for_pid () {
            try=0
    
            while test $try -lt 35 ; do
    
                    case "$1" in
                            'created')
                            if [ -f "$2" ] ; then
                                    try=''
                                    break
                            fi
                            ;;
    
                            'removed')
                            if [ ! -f "$2" ] ; then
                                    try=''
                                    break
                            fi
                            ;;
                    esac
    
                    echo -n .
                    try=`expr $try + 1`
                    sleep 1
    
            done
    
    }
    
    case "$1" in
            start)
                    echo -n "Starting php-fpm "
    
                    $php_fpm_BIN --daemonize $php_opts
    
                    if [ "$?" != 0 ] ; then
                            echo " failed"
                            exit 1
                    fi
    
                    wait_for_pid created $php_fpm_PID
    
                    if [ -n "$try" ] ; then
                            echo " failed"
                            exit 1
                    else
                            echo " done"
                    fi
            ;;
    
            stop)
                    echo -n "Gracefully shutting down php-fpm "
    
                    if [ ! -r $php_fpm_PID ] ; then
                            echo "warning, no pid file found - php-fpm is not running ?"
                            exit 1
                    fi
    
                    kill -QUIT `cat $php_fpm_PID`
    
                    wait_for_pid removed $php_fpm_PID
    
                    if [ -n "$try" ] ; then
                            echo " failed. Use force-quit"
                            exit 1
                    else
                            echo " done"
                    fi
            ;;
    
            status)
                    if [ ! -r $php_fpm_PID ] ; then
                            echo "php-fpm is stopped"
                            exit 0
                    fi
    
                    PID=`cat $php_fpm_PID`
                    if ps -p $PID | grep -q $PID; then
                            echo "php-fpm (pid $PID) is running..."
                    else
                            echo "php-fpm dead but pid file exists"
                    fi
            ;;
    
            force-quit)
                    echo -n "Terminating php-fpm "
    
                    if [ ! -r $php_fpm_PID ] ; then
                            echo "warning, no pid file found - php-fpm is not running ?"
                            exit 1
                    fi
    
                    kill -TERM `cat $php_fpm_PID`
    
                    wait_for_pid removed $php_fpm_PID
    
                    if [ -n "$try" ] ; then
                            echo " failed"
                            exit 1
                    else
                            echo " done"
                    fi
            ;;
    
            restart)
                    $0 stop
                    $0 start
            ;;
    
            reload)
    
                    echo -n "Reload service php-fpm "
    
                    if [ ! -r $php_fpm_PID ] ; then
                            echo "warning, no pid file found - php-fpm is not running ?"
                            exit 1
                    fi
    
                    kill -USR2 `cat $php_fpm_PID`
    
                    echo " done"
            ;;
    
            configtest)
                    $php_fpm_BIN -t
            ;;
    
            *)
                    echo "Usage: $0 {start|stop|force-quit|restart|reload|status|configtest}"
                    exit 1
            ;;
    
    esac
    
    4,给予相应的执行权限,将服务添加到列表,并测试是否成功
    chmod a+x /etc/init.d/php-fpm
    chkconfig --add /etc/init.d/php-fpm
    service php-fpm start
    service php-fpm stop
    
    5,设置php-fpm开机启动
    chkconfig php-fpm on
  7. nginx反向代理php-fpm
    1,在根目录新建www目录,在www目录下新建nsxt目录以及wwwlogs目录,在nsxt目录下新增index.php文件,index.php文件里就输出phpinfo()
    mkdir -p /www/nsxt /www/wwwlogs
    vi /www/nsxt/index.php
    chown -R www:www /www
    chmod -R 755 /www
    
    2,在nginx的配置文件nginx.conf中新增一个server,内容如下
    server
    {
        listen 80;
        server_name localhost;
        index index.php index.html index.htm default.php default.htm default.html;
        root /www/nsxt;
        
        #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
        #error_page 404/404.html;
        #SSL-END
        
        #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
        #error_page 404 /404.html;
        #error_page 502 /502.html;
        #ERROR-PAGE-END
        
        #PHP-INFO-START  PHP引用配置,可以注释或修改
        location ~ [^/]\.php(/|$)
        {
            try_files $uri =404;
            fastcgi_pass  unix:/tmp/php-cgi.sock;  #与php-fpm通信的sock,只有nginx和php-fpm都运行在同一台服务器才能以此方式运行
            fastcgi_index index.php;
           
            fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
            fastcgi_param  QUERY_STRING       $query_string;
            fastcgi_param  REQUEST_METHOD     $request_method;
            fastcgi_param  CONTENT_TYPE       $content_type;
            fastcgi_param  CONTENT_LENGTH     $content_length;
    
            fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
            fastcgi_param  REQUEST_URI        $request_uri;
            fastcgi_param  DOCUMENT_URI       $document_uri;
            fastcgi_param  DOCUMENT_ROOT      $document_root;
            fastcgi_param  SERVER_PROTOCOL    $server_protocol;
            fastcgi_param  REQUEST_SCHEME     $scheme;
            fastcgi_param  HTTPS              $https if_not_empty;
    
            fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
            fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
    
            fastcgi_param  REMOTE_ADDR        $remote_addr;
            fastcgi_param  REMOTE_PORT        $remote_port;
            fastcgi_param  SERVER_ADDR        $server_addr;
            fastcgi_param  SERVER_PORT        $server_port;
            fastcgi_param  SERVER_NAME        $server_name;
    
            # PHP only, required if PHP was built with --enable-force-cgi-redirect
            fastcgi_param  REDIRECT_STATUS    200;
        set $real_script_name $fastcgi_script_name;
            if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
                            set $real_script_name $1;
                            set $path_info $2;
             }
            fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
            fastcgi_param SCRIPT_NAME $real_script_name;
            fastcgi_param PATH_INFO $path_info;
        }
        #PHP-INFO-END
        
        #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
        location / {
            if (!-e $request_filename){
            rewrite  ^(.*)$  /index.php?s=$1  last;   break;
            }
        }
        #REWRITE-END
        
        #禁止访问的文件或目录
        location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
        {
            return 404;
        }
        
        #一键申请SSL证书验证目录相关设置
        location ~ \.well-known{
            allow all;
        }
        
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
            error_log off;
            access_log /dev/null;
        }
        
        location ~ .*\.(js|css)?$
        {
            expires      12h;
            error_log off;
            access_log /dev/null; 
        }
        access_log  /www/wwwlogs/nsxt.log;
        error_log  /www/wwwlogs/nsxt.error.log;
    }
    
    3,重启nginx,访问指定地址页面,如果正确输出phpinfo的信息则表示成功
    service nginx restart
      

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐