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

CentOS 7系统LAMP配置PHP-FPM的示例的更多相关文章

  1. 生产环境CentOS服务器系统安全配置

    转http://www.centoscn.com/CentosSecurity/CentosSafe/2014/1126/4192.html 账户安全及权限 禁用root以外的超级用户 删除不必要的账 ...

  2. CentOS 7 系统基础配置

    系统版本:CentOS 7.2.1511 Minimal 采用最小化系统安装,许多组件默认是不安装的,通过手工安装一些常用工具包,让系统用起来更顺手. 1.修改机器名: [root@centos7-m ...

  3. CentOS 新系统后配置

    1. 网络配置 略 1.2 ip_froward 查看 sysctl -a | grep ip_ 修改 vi /etc/sysctl.conf net.ipv4.ip_forward = 1 最大使用 ...

  4. CentOS 6 系统基础配置

    系统版本:CentOS 6.8 Minimal 采用最小化系统安装,许多组件默认是不安装的,通过手工安装一些常用工具包,让系统用起来更顺手. 1.设置机器名: # echo "NETWORK ...

  5. Linux:CentOS 7系统的安装

    相信有看过我写的博文就知道我写的第一篇博文就是CentOS 7系统的安装,不过是在虚拟机中安装的,而且还是直接加载镜像文件进去的,不过这次我就通过PE来安装,来证实下PE是否可以用来安装Linux系统 ...

  6. Centos6/7系统基础配置-从零到无

    转至:https://www.cnblogs.com/Pigs-Will-Fly/p/13855300.html 目录 前言 系统配置 文档作用 一.Centos 6.X 系列配置 1.1  主机名 ...

  7. CentOS 6.6安装配置LAMP服务器(Apache+PHP5+MySQL)

    准备篇: CentOS 6.6系统安装配置图解教程 http://www.osyunwei.com/archives/8398.html 1.配置防火墙,开启80端口.3306端口 vi /etc/s ...

  8. CentOS 6.4安装配置LAMP服务器(Apache+PHP5+MySQL)

    这篇文章主要介绍了CentOS 6.4安装配置LAMP服务器(Apache+PHP5+MySQL)的方法,需要的朋友可以参考下 文章写的不错,很详细:IDO转载自网络: 准备篇: 1.配置防火墙,开启 ...

  9. CentOS 7.0安装配置LAMP服务器(Apache+PHP+MariaDB)

    CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop firewalld.service #停止fir ...

随机推荐

  1. curl以cookie的方式登录

    curl -o /dev/null -s -w ‘%{time_connect}:%{time_starttransfer}:%{time_total}’ --cookie "UM_dist ...

  2. [javase学习笔记]-8.6 静态的内存载入

    之前几节我们一直在说statickeyword所修饰的静态,那么在程序执行时,内存中static是怎样体现的呢?这一节我们就来看一看. 我们还是先看一个样例.希望我们通过对这个样例的分析让我们刚開始学 ...

  3. 使用FiddlerCore来截取替换Http请求中的网页内容

    做过测试的应该都知道Fiddler,它可以很方便截取Internet上的网页替换成本地的,或者修改其中的一部分内容后呈现.简单地说就是可能监测所有HTTP连接,设置断点,胡乱修改.是测试调试的一件利器 ...

  4. 【Unity】12.3 Off Mesh Link组件

    开发环境:Win10.Unity5.3.4.C#.VS2015 创建日期:2016-05-09 一.简介 Off Mesh Link组件用于手动指定路线来生成分离的网格连接.例如,游戏中让行进对象上下 ...

  5. 查看Android内存的8中方法

    方法一: 通过手机上Running services的Activity查看,可以通过Setting->Applications->Running services进. 关于Running ...

  6. ExtJs--05--给window组件加入功能条以及子组件获取上级或下级组件的属性和方法

    Ext.onReady(function(){ /** 1-- 给容器组件加入控制条 及 控制项 控制条 不同的方向有多种 tbar lbar rbar bbar fbar 2-- 依据组件本身拿到上 ...

  7. Struts2对值的推断

    目的是想将jsp中的input输入: <input class="inputstyle" type="text" value="<s:pr ...

  8. NonWindowJoin

    package org.apache.flink.table.runtime.join /** * Connect data for left stream and right stream. Bas ...

  9. 【编码】Base64编码

    简述 为什么叫Base64?个人理解是,基础的64个字符. 而它的作用?用基础的(可理解为可安全传输的)64个字符,来表示难以表示的二进制或对程序造成干扰的字符. Base64的编码过程 自行编码分析 ...

  10. VS2015打开项目慢、死机和卡顿解决方案

    VS2015功能强大,但是经常慢 网上有解决方案如下几个,留着备用: 1.选项-环境-基于客户端性能自动调整视觉体验,去掉选项. 2.选项-源代码管理-插件选无. 3.选项-文本编辑器-所有语言-滚动 ...