• CentOS 7 编译安装PHP5.6.31


            服务器上已经有nginx和mysql,所以就决定采用 PHP+Nginx+mysql这个组合,在网上翻了很多资料,由于对linux和PHP不不了解,不知道PHP和nginx和mysql是怎么关联的,遇到各种原因(不是php装错了,就是包没装,),花了很多时间,后来部署完后发现,这三个都是单独安装(额~~难道还能一起安装),只需要php安装后配置下,nginx的配置下(和php的关联)就直接可以跑了。至于mysql,只要开启,php项目里面的连接数据库配置好了,可以直接连上去。所以本文主要针对php的安装。

    关于nginx和mysql的安装,开始安装前需要在linux的一些开发库安装在此也不复述,参考链接里面都有。

    本文主要参考了此链接博客:https://www.cnblogs.com/flower-tree/p/7562101.html

    php版本:5.6.31

    nginx版本:1.7.3

    mysql版本:5.6.62

    PHP安装配置

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

    nginx一般把请求发送给fastcgi管理进程处理,fastcgi管理进程选择cgi子进程处理结果并返回nginx。

    什么是PHP-FPM?PHP-FPM是一个属于PHP的FASTCGI管理器,只用于PHP,新版本已集成php-fpm了,php-fpm提供更好的php进程管理,可以有效控制内存和进程,可以平滑重载php配置。在configure时,带-enable-fpm参数即可开启php-fpm,其他参数可见这里,至于什么是fastcgi,和php-fpm什么关系,可参考链接https://segmentfault.com/q/1010000000256516

    安装前准备

    添加 epel 源

    rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

    安装依赖

    yum install gcc bison bison-devel zlib-devel libmcrypt-devel mcrypt mhash-devel openssl-devel libxml2-devel libcurl-devel bzip2-devel readline-devel libedit-devel sqlite-devel
    
    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-5.6.31

      1)将安装包解压到 /usr/local/src

    cd /usr/local/src
    
    tar -zvxf php-5.6.31.tar.gz

         2)进入安装目录,进行安装

    cd php-5.6.31
    
    ./configure --prefix=/usr/local/php --enable-fpm --with-mcrypt 
    --enable-mbstring --enable-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-mysqli 
    --with-gd --with-jpeg-dir --with-freetype-dir --enable-calendar
    
    
    make && make install
    CentOS 中下载php: wget http://php.net/get/php-5.6.30.tar.gz/from/this/mirror

    以上就完成了php-fpm的安装,安装过程会花一些时间。

    关于php配置

    1、为php提供配置文件

    cp php.ini-production /usr/local/php/etc/php.ini

    注意:php.ini-production 还是在刚才/usr/local/src/php-5.6.31 目录下

    2、为php-fpm提供配置文件

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

    修改php-fpm.conf

    user = www
    group = www

    如果www用户不存在,那么先添加www用户(默认运行用户nobody)

    groupadd www
    useradd -g www www

    如果没有配置这一步,浏览器打开 php 文件会报错

    “The page you are looking for is temporarily unavailable. Please try again later”

     
    修改
    pm.max_children = 150
    pm.start_servers = 8
    pm.min_spare_servers = 5
    pm.max_spare_servers = 10
    pid = /usr/local/php/var/run/php-fpm.pid

    3、启动php-fpm

    执行

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

    使用如下命令来验正(如果此命令输出有中几个php-fpm进程就说明启动成功了):

    ps aux | grep php-fpm

    结果如下图:

    3、nginx和php-fpm整合

     编辑nginx配置文件

    vim /usr/local/nginx/conf/nginx.conf

    初始内容如下:

    # nginx运行的用户名
    user nginx;
    # nginx启动进程,通常设置成和cpu的数量相等,这里为自动
    worker_processes auto;
    
    # errorlog文件位置
    error_log /var/log/nginx/error.log;
    # pid文件地址,记录了nginx的pid,方便进程管理
    pid /run/nginx.pid;
    
    # Load dynamic modules. See /usr/share/nginx/README.dynamic.
    # 用来加载其他动态模块的配置
    include /usr/share/nginx/modules/*.conf;
    
    # 工作模式和连接数上限
    events {
        # 每个worker_processes的最大并发链接数
        # 并发总数:worker_processes*worker_connections
        worker_connections 1024;
    }
    
    # 与提供http服务相关的一些配置参数类似的还有mail
    http {
        # 设置日志的格式
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        # access_log记录访问的用户、页面、浏览器、ip和其他的访问信息
        access_log  /var/log/nginx/access.log  main;
    
        # 这部分下面会单独解释
        # 设置nginx是否使用sendfile函数输出文件
        sendfile            on;
        # 数据包最大时发包(使用Nagle算法)
        tcp_nopush          on;
        # 立刻发送数据包(禁用Nagle算法)
        tcp_nodelay         on;
        # 链接超时时间
        keepalive_timeout   65;
        # 这个我也不清楚...
        types_hash_max_size 2048;
    
        # 引入文件扩展名与文件类型映射表
        include             /etc/nginx/mime.types;
        # 默认文件类型
        default_type        application/octet-stream;
    
        # Load modular configuration files from the /etc/nginx/conf.d directory.
        # See http://nginx.org/en/docs/ngx_core_module.html#include
        # for more information.
        include /etc/nginx/conf.d/*.conf;
    
        # http服务上支持若干虚拟主机。
        # 每个虚拟主机一个对应的server配置项
        # 配置项里面包含该虚拟主机相关的配置。
        server {
            # 端口
            listen       80 default_server;
            listen       [::]:80 default_server;
            # 访问的域名
            server_name  _;
            # 默认网站根目录(www目录)
            root         /usr/share/nginx/html;
    
            # Load configuration files for the default server block.
    
            include /etc/nginx/default.d/*.conf;
    
            # 默认请求
            location / {
            }
    
            # 错误页(404)
            error_page 404 /404.html;
                location = /40x.html {
            }
    
            # 错误页(50X)
            error_page 500 502 503 504 /50x.html;
                location = /50x.html {
            }
        }
    }

    我们要更改配置的只需要server部分就可以了。进入vim编辑模式,或者用FlashFXP将配置文件共享到桌面来更改即可。

    只需要改动三处即可

    server {
            listen       80 default_server;
            listen       [::]:80 default_server;
            # 这里改动了,也可以写你的域名,我用的是IP地址
            server_name  192.168.0.222;
            root         /usr/share/nginx/html;
    
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
    
            location / {
                # 这里改动了 定义首页索引文件的名称
                index index.php index.html index.htm;
            }
    
            error_page 404 /404.html;
                location = /40x.html {
            }
    
            error_page 500 502 503 504 /50x.html;
                location = /50x.html {
            }
    
            # 这里新加的
            # PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI协议默认配置.
            # Fastcgi服务器和程序(PHP,Python)沟通的协议.
            location ~ .php$ {
                # 设置监听端口
                fastcgi_pass   127.0.0.1:9000;
                # 设置脚本文件请求的路径
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                # 引入fastcgi的配置文件
                include        fastcgi_params;
            }
        }

      重启nginx服务器

    nginx -s reload

       此时,nginx和php已经联合配置完成了,但是我们并不知道实际配置效果如何,这个时候我们可以写一个小的测试脚本来验证一下。
    之前提过了/usr/share/nginx/html是Nginx的网站根目录,我们可以在此目录下建立一个php测试脚本。

    # phpinfo.php是我要建立的文件名

    vi /usr/share/nginx/html/phpinfo.php

    打开编辑器后,在里面输入

    <?php
    phpinfo();// 测试信息
    ?>

    保存退出后,在浏览器中输入http://192.168.0.222/phpinfo.php,我这里的ip是192.168.0.222,你换成你们自己的即可。如图出现类似如下界面:

    Nginx和php已经配置完成了。

    4、安装过程出错原因

    我按流程安装时,出现了一个错误:mcrypt.h not found. Please reinstall libmcrypt

    是因为php-mcrypt  libmcrypt  libmcrypt-devel这些包没安装,出现的错误一般都是缺少库或者包,安装即可。

    此时PHP已经配置完成,祝君安装顺利。顺便提前祝大家新年快乐!

  • 相关阅读:
    负载均衡
    nginx 负载均衡
    linux crontab 定时任务
    linux各种查看端口号
    MYSQL集群
    linux ntp时间同步
    【推荐】开源项目ElasticAmbari助力 ElasticSearch、Kibana、ambari服务高效运维管理
    Flutter开发指南之理论篇:Dart语法05(单线程模型,事件循环模型,Isolate)
    对于 评论 发送,出现网络延迟、响应慢,用户多次点击发送按钮,怎么解决只生成一次数据存入DB
    第三方授权登录
  • 原文地址:https://www.cnblogs.com/VicLiu/p/12186587.html
Copyright © 2020-2023  润新知