zoukankan      html  css  js  c++  java
  • CentOS 7系统LAMP配置PHP-FPM的示例

    CentOS 7 系统出来有一段时间了,今天我们来看在vps中的 CentOS 7 中给lamp环境配置php-fpm的过程,希望文章可以帮助到各位。

    CentOS 7 已经发布,并且采用 Apache 2.4 作为默认的 Apache 组件。听说 Apache 2.4 的 Event 模式很不错,而且配套的 mod_proxy_fcgi 与 PHP 已经原生支持的 PHP-FPM 配合默契且性能很好,再加上 Google 的 mod_spdy 需要运行在 thread safe 的环境下,改用 CentOS 7 + Apache 2.4 + MariaDB + PHP + PHP-FPM 似乎就成为顺理成章的事情了。因为 phpMyAdmin 匹配 PHP-FPM 的配置与一般的虚拟主机稍稍不同,一并写上。

    因为是在现成的 CentOS 7 + PHP + MariaDB + phpMyAdmin 的 LAMP 服务器上将使用 mod_php 的 Apache MPM prefork 模式改为使用 PHP-FPM 的 MPM event 模式,故而直接从安装 PHP-FPM 开始,然后设置 PHP-FPM 的 pool 配置文件,最后修改 Apache 的虚拟主机配置文件和设置 MPM event 运行参数。

    1. 安装 PHP-FPM

    以 root 身份运行,或者 sudo 运行

    yum install -y php-fpm

    安装 CentOS 发行版默认的 PHP-FPM 安装包。yum 会自动解决依赖包的安装问题。

    产生以下2个配置文件:

    /etc/php-fpm.conf
    
    /etc/php-fpm.d/www.conf

    前一个配置文件不需要修改。后一个就是所谓的 pool 了(好像有人称之为“代理池”?)。

    2. 配置 PHP-FPM 的 pool

    Pool 配置文件都在 /etc/php-fpm/ 目录下,可以有很多个,结构一样,名称不同,配置参数根据需要变化。

    比如针对每个虚拟主机设置单独的配置文件。但是水景一页的这个 VPS 上只运行了几个自己的虚拟主机,而不是做共享主机使用,所以对几个网站使用了同一个 www.conf 的配置文件。php-fpm 的参数设置可以参考这里的说明,还有这里的示例。

    下面是水景一页目前在用的参数,还在测试调整当中:

    pm = dynamic

    pm.max_children = 9

    pm.start_servers = 2

    pm.min_spare_servers = 1

    pm.max_spare_servers = 4

    pm.max_requests = 500

    因为并不是用于做共享主机的,只运行自己的几个虚拟主机,应该不需要给每个虚拟主机创建一个 pool,所以这里给几个虚拟主机使用相同的 www pool。如果需要给每个虚拟主机建一个单独的 pool,请参考这篇文章。

    3. 修改虚拟主机配置文件

    涉及到 2 类文件,一是全局的 Apache 配置文件,一是针对每个虚拟主机(Virtual Host)的配置文件。

    3.1 全局 APACHE 配置文件及 EVENT MPM 运行参数

    首先,检查一下,如果有不同的话,需要将 /etc/httpd/conf/httpd.conf 中的

    DirectoryIndex index.html

    改为

    DirectoryIndex index.php index.html index.htm

    因为 event MPM 与 prefork MPM 的运行方式不同,参数设置也有不同。而且现在 CentOS 7 中安装 Apache 之后在默认的配置文件 /etc/httpd/conf/httpd.conf 中都没有默认的参数了(连之前 prefork 的默认参数都被拿掉了)。所以从方便实用的角度考虑,水景一页推荐自己创建一个 /etc/httpd/conf.d/common.conf 文件来放置这类全局的、httpd.conf 中又没有的参数。

    下面是水景一页目前正在使用,但还在测试观察和优化的 event MPM 运行参数,仅供参考:

    StartServers 2

    ServerLimit 16

    MinSpareThreads 32

    MaxSpareThreads 128

    ThreadsPerChild 64

    MaxRequestWorkers 1024

    MaxConnectionsPerChild 500

    Timeout 30

    KeepAlive On

    MaxKeepAliveRequests 100

    # 2 or 3 for prefork, but event or worker can deal with it cleverly, maybe 15?

    KeepAliveTimeout 5

    # For Fallback

    StartServers 8

    MinSpareServers 8

    MaxSpareServers 12

    MaxClients 50

    ServerLimit 50

    MaxRequestsPerChild 1000

    Timeout 30

    KeepAlive On

    MaxKeepAliveRequests 100

    # 2 or 3 for prefork

    KeepAliveTimeout 2

    ServerSignature Off

    ServerTokens Prod

    另外可能需要提醒一下,水景一页目前使用的 Linode VPS 是 1G RAM,基本上就是运行这个网站了。

    3.2 修改虚拟主机配置文件

    然后还需要修改虚拟主机配置文件中的设置,例子中用的虚拟主机配置文件名是 vhost.conf 和 vhostssl.conf(针对 SSL 加密连接访问的配置)。这里就不弄太多例子了,原始配置请参考之前安装配置 LAMP 服务器的文章。

    水景一页这个 VPS 不是给共享服务器而是纯粹自用的服务器,只有为数不多的几个虚拟主机,所以几个虚拟主机都在同一个文件中。总之是,需要对每个 VirtualHost 里的内容都做修改:在 DocumentRoot 那一行前面增加一段,

    ProxyPassMatch ^/(.*.php(/.*)?)$ fcgi://127.0.0.1:9000/srv/www/local/html/$1

    红色字体部分要特别注意,需要与每个 DocumentRoot 后面的路径一致。

    在 CentOS 中,虚拟主机配置文件存放在 /etc/httpd/conf.d 目录下。例如使用 mod_php 时候其中一个 Virtual Host 的配置(参考这里):

    ServerAdmin admin@cnzhx.net
    
    ServerName local.cnzhx.net
    
     
    
    ProxyPassMatch ^/(.*.php(/.*)?)$ fcgi://127.0.0.1:9000/srv/www/local/html/$1
    
     
    
    DocumentRoot /srv/www/local/html/
    
     
    
    # protect wpconfig.php
    
     
    
    Require all Denied
    
     
    
    RewriteEngine on
    
    # BEGIN WordPress
    
    … … …
    
    # END WordPress
    
     
    
    ErrorLog "|/usr/sbin/rotatelogs /srv/www/logs/%Y%m%d.www.error.log 86400 480"
    
    CustomLog "|/usr/sbin/rotatelogs /srv/www/logs/%Y%m%d.www.access.log 86400 480" combined

    前面提到过,phpMyAdmin 的虚拟主机文件设置稍稍有些不同,需要在上面增加的那一句声明下面再增加一句包含 phpMyAdmin 目录的声明,如下面的蓝色字体部分,

    ProxyPassMatch ^/phpMyAdmin/(.*.php(/.*)?)$ fcgi://127.0.0.1:9000/srv/www/phpmyadmin/public_html/phpMyAdmin/$1
    
    ProxyPassMatch ^/phpMyAdmin((.*)?/)$ fcgi://127.0.0.1:9000/srv/www/phpmyadmin/public_html/phpMyAdmin$1index.php

    其它保持不变。

    4. 收尾、运行

    现在,只需要将 /etc/httpd/conf.modules.d/00-mpm.conf 中的

    LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

    前面加上 # 注释掉,然后将,

    #LoadModule mpm_event_module modules/mod_mpm_event.so

    前面的 # 去掉。

    如果曾经优化过 Apache 的模块,还需要检查一下 /etc/httpd/conf.modules.d/00-proxy.conf 文件中的,

    LoadModule proxy_module modules/mod_proxy.so
    
    和
    
    LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

    确保它们前面没有 #。

    再重启 PHP-FPM 和 HTTPD 服务就可以了,

    systemctl restart php-fpm

    systemctl restart httpd

    http://www.tuicool.com/articles/feAbmui

  • 相关阅读:
    Linux Shell脚本Ldd命令原理及使用方法
    没有判断好形势,哪怕再多的传感器说有问题,核心的那个几仪表就是在歌舞升平
    JVM
    leetcode第一刷_Count and Say
    html 前台通用表单
    BP神经网络算法学习
    flash的dragonbone插件导入cocos2d的注意事项
    445port入侵具体解释
    google域名邮箱申请 gmail域名邮箱申请(企业应用套件)指南
    SQL性能优化工具TKPROF
  • 原文地址:https://www.cnblogs.com/chunguang/p/5830700.html
Copyright © 2011-2022 走看看