第十八章 lamp架构

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

18.1 lamp简介

  有了前面学习的知识的铺垫,今天可以来学习下第一个常用的web架构了。

  所谓lamp,其实就是由Linux+Apache+Mysql/MariaDB+Php/Perl/Python的一组动态网站或者服务器的开源软件,除Linux外其它各部件本身都是各自独立的程序,但是因为经常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。


  LAMP指的是Linux(操作系统)、Apache(HTTP服务器)、MySQL(也指MariaDB,数据库软件)和PHP(有时也是指Perl或Python)的第一个字母,一般用来建立web应用平台


18.2 Web服务器工作流程

  在说lamp架构平台的搭建前,我们先来了解下什么是CGI,什么是FastCGI,什么是......


  web服务器的资源分为两种,静态资源和动态资源。

  所谓静态资源就是指静态内容,客户端从服务器获得的资源的表现形式与原文件相同。可以简单的理解为就是直接存储于文件系统中的资源

  动态资源则通常是程序文件,需要在服务器执行之后,将执行的结果返回给客户端。


  那么web服务器如何执行程序并将结果返回给客户端呢?下面通过一张图来说明一下web服务器如何处理客户端的请求

wKiom1ldsGqRlk_KAACp_UaOlp4828.png

  如上图所示

  阶段①显示的是httpd服务器(即apache)和php服务器通过FastCGI协议进行通信,且php作为独立的服务进程运行

  阶段②显示的是php程序和mysql数据库间通过mysql协议进行通信。php与mysql本没有什么联系,但是由Php语言写成的程序可以与mysql进行数据交互。同理perl和python写的程序也可以与mysql数据库进行交互


18.2.1 cgi与fastcgi

  上图阶段①中提到了FastCGI,下面我们来了解下CGI与FastCGI。

  

  CGI(Common Gateway Interface,通用网关接口),CGI是外部应用程序(CGI程序)与WEB服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的过程。CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。

  

  FastCGI(Fast Common Gateway Interface)是CGI的改良版,CGI是通过启用一个解释器进程来处理每个请求,耗时且耗资源,而FastCGI则是通过master-worker形式来处理每个请求,即启动一个master主进程,然后根据配置启动几个worker进程,当请求进来时,master会从worker进程中选择一个去处理请求,这样就避免了重复的生成和杀死进程带来的频繁cpu上下文切换而导致耗时


18.2.2 httpd与php结合的方式

  httpd与php结合的方式有以下三种:

  a) modules:php将以httpd的扩展模块形式存在,需要加载动态资源时,httpd可以直接通过php模块来加工资源并返回给客户端

    httpd prefork:libphp5.so(多进程模型的php)

    httpd event or worker:libphp5-zts.so(线程模型的php)

  b) CGI:httpd需要加载动态资源时,通过CGI与php解释器联系,获得php执行的结果,此时httpd负责与php连接的建立和断开等

  c) FastCGI:利用php-fpm机制,启动为服务进程,php自行运行为一个服务,https通过socket与php通信


  较于CGI方式,FastCGI更为常用,很少有人使用CGI方式来加载动态资源


18.2.3 web工作流程

  下面来通过上面的图说明一下web的工作流程

  客户端通过http协议请求web服务器资源,web资源收到请求后判断客户端请求的资源是静态资源或是动态资源,若是静态资源则直接从本地文件系统取之返回给客户端。否则若为动态资源则通过FastCGI协议与php服务器联系,通过CGI程序的master进程调度worker进程来执行程序以获得客户端请求的动态资源,并将执行的结果通过FastCGI协议返回给httpd服务器,httpd服务器收到php的执行结果后将其封装为http响应报文响应给客户端。在执行程序获取动态资源时若需要获得数据库中的资源时,由Php服务器通过mysql协议与MySQL/MariaDB服务器交互,取之而后返回给httpd,httpd将从php服务器收到的执行结果封装成http响应报文响应给客户端。


18.3 lamp平台构建

18.3.1 通过yum安装方式构建lamp平台

  CentOS7下构建lamp:

  要安装的程序包:httpd,php,php-mysql,mariadb-server

  注意:php要求httpd使用prefork MPM

1
2
3
yum -y  install  httpd php php-mysql mariadb-server
systemctl start httpd.service
systemctl start mariadb.service


  CentOS6下构建lamp:

  要安装的程序包:httpd,php,php-mysql,mysql-server

1
2
3
yum -y  install  httpd php php-mysql mysql-server
service httpd start
service mysqld start



18.3.2 编译安装lamp

  http对fastcgi协议的支持

  a) httpd-2.2:需要额外安装fastcgi模块

1
2
3
4
5
6
wget https: //mirrors .tuna.tsinghua.edu.cn /apache//httpd/mod_fcgid/mod_fcgid-2 .3.9. tar .bz2
tar  xf mod_fcgid-2.3.9. tar .bz2
cd  mod_fcgid-2.3.9
. /configure .apxs
make
make  install

  b) httpd-2.4:自带fastcgi模块


  安装次序:httpd,MariaDB,php

  安装httpd-2.2:

1
2
3
4
5
6
7
8
9
10
11
12
cd  /usr/src
wget http: //mirror .bit.edu.cn /apache//httpd/httpd-2 .2.32. tar .bz2
tar  xf httpd-2.2.32. tar .bz2
cd  httpd-2.2.32
. /configure  --prefix= /usr/local/httpd
make
make  install
echo  'PATH=/usr/local/httpd/bin:$PATH'  /etc/profile .d /httpd .sh
source  /etc/profile .d /httpd .sh
ln  -s  /usr/local/httpd/include/  /usr/include/httpd
echo  'MANPATH /usr/local/httpd/man'  >>  /etc/man .config
apachectl start

  

  安装MariaDB:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
cd  /usr/src
wget http: //ftpmirror .gnu.org /gcc/gcc-5 .2.0 /gcc-5 .2.0. tar .bz2
tar  xf gcc-5.2.0. tar .bz2
cd  gcc-5.2.0
. /contrib/download_prerequisites
yum -y  install  gcc-c++ glibc-static gcc
 
. /configure  --prefix= /usr/local/gcc   -- enable -bootstrap  -- enable -checking=release -- enable -languages=c,c++ --disable-multilib
make  -j $( cat  /proc/cpuinfo  | grep  'processor' | wc  -l)
make  install
 
echo  'export PATH=/usr/local/gcc/bin:$PATH'  /etc/profile .d /gcc .sh
/etc/profile .d /gcc .sh
ln  -sv  /usr/local/gcc/include/  /usr/include/gcc
echo  '/usr/local/gcc/lib64'  /etc/ld .so.conf.d /gcc .conf
echo  '/usr/local/gcc/lib'  >>  /etc/ld .so.conf.d /gcc .conf
ldconfig -p | grep  gcc   #验证是否导出头文件
 
cd  /usr/src
yum  install  -y ncurses-devel openssl-devel openssl cmake mysql-devel
wget 
  
groupadd -r -g 306 mysql
useradd  -r -g 306 -u 306 mysql
mkdir  -pv  /data/mydata
chown  -R mysql.mysql  /data/mydata
 
tar  xf mariadb-10.2.6. tar .gz
cd  mariadb-10.2.6
cmake . -DCMAKE_INSTALL_PREFIX= /usr/local/mysql  \
-DMYSQL_DATADIR= /data/mydata  \
-DSYSCONFDIR= /etc   \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 -DWITH_SSL=system \
-DWITH_ZLIB=system -DWITH_LIBWRAP=0 \
-DMYSQL_UNIX_ADDR= /tmp/mysql .sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
make  -j $( cat  /proc/cpuinfo  | grep  'processor' | wc  -l)
make  install


  cmake参数说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# 安装根目录
-DCMAKE_INSTALL_PREFIX= /usr/local/mysql
 
# 数据存储目录
-DMYSQL_DATADIR= /data/mydata
 
# UNIX socket文件
-DMYSQL_UNIX_ADDR= /tmp/mysql .sock
 
# 配置文件(my.cnf)目录
-DSYSCONFDIR= /etc
 
# 默认字符集
-DDEFAULT_CHARSET=utf8
 
# 默认字符校对
-DDEFAULT_COLLATION=utf8_general_ci
 
# TCP/IP端口
-DMYSQL_TCP_PORT=3306 
 
# * ARCHIVE 引擎支持
-DWITH_ARCHIVE_STORAGE_ENGINE=1 
 
# * ARIA 引擎支持
-DWITH_ARIA_STORAGE_ENGINE=1
 
# * BLACKHOLE 引擎支持
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 
 
# * FEDERATEDX 引擎支持
-DWITH_FEDERATEDX_STORAGE_ENGINE=1
 
# * PARTITION 引擎支持
-DWITH_PARTITION_STORAGE_ENGINE=1 
 
# * PERFSCHEMA 引擎支持
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 
 
# * SPHINX 引擎支持
-DWITH_SPHINX_STORAGE_ENGINE=1
 
# * XTRADB 支持
-DWITH_XTRADB_STORAGE_ENGINE=1 
 
# * innoDB 引擎支持
-DWITH_INNOBASE_STORAGE_ENGINE=1
 
# * Myisam 引擎支持
-DWITH_MYISAM_STORAGE_ENGINE=1
 
# readline库
-DWITH_READLINE=1 
 
# 启用加载本地数据
-DENABLED_LOCAL_INFILE=1
 
# 扩展支持编码 ( all | utf8,gbk,gb2312 | none )
-DWITH_EXTRA_CHARSETS=all
 
# 扩展字符支持
-DEXTRA_CHARSETS=all
 
# 系统传输使用SSL加密
-DWITH_SSL=system
 
# 系统传输使用zlib压缩,节约带宽
-DWITH_ZLIB=system
 
# libwrap库
-DWITH_LIBWRAP=0
 
# 运行用户
-DMYSQL_USER=mysql
 
# 调试模式
-DWITH_DEBUG=0


  配置MariaDB:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cd  /usr/local/mysql/
scripts /mysql_install_db  --user=mysql --datadir= /data/mydata/
 
echo  'export PATH=/usr/local/mysql/bin:$PATH'  /etc/profile .d /mysql .sh
/etc/profile .d /mysql .sh
ln  -sv  /usr/local/mysql/include/  /usr/local/include/mysql
echo  '/usr/local/mysql/lib'  /etc/ld .so.conf.d /mysql .conf
ldconfig - v
ldconfig -p | grep  mysql
cp  support-files /mysql .server  /etc/rc .d /init .d /mysqld
chkconfig --add mysqld
chkconfig mysqld on
cp  support-files /my-large .cnf  /etc/my .cnf
sed  -i  '/\[mysqld\]/a datadir=/data/mydata'  /etc/my .cnf
 
service mysqld start
mysql -uroot -e  'GRANT all ON *.* TO root@"localhost" identified by "qwe123!"'


 安装php:详见18.4.3


18.3.3 测试

  php程序执行环境:在/var/www/html目录下新建一个index.php文件,其内容如下:

1
2
3
<?php
     phpinfo();
?>


  测试php程序与mysql通信:在/var/www/html目录下新建一个index.php文件,其内容如下:

1
2
3
4
5
6
7
8
9
<?php
     $conn=mysql_connect( 'HOSTNAME' , 'USERNAME OF MYSQL' , 'PASSWORD OF MYSQL USER' );
     if  ($conn)
         echo  'Connect Success!' ;
     else
         echo  'Connect Failed!' ;
     fi
     mysql_close();
?>


18.4 php

18.4.1 php解释器与MariaDB/mysql交互

  php解释器本身无须与MariaDB交互,只有那些用到数据存储系统的程序才需要与数据存储交互。


  常见的数据存储系统有以下这些:

  a) 文件系统:存储文件

  b) SQL:MariaDB,Oracle,MSSQL,...

  c) NoSQL:redis,mongodb,hbase,...

  NewSQL


18.4.2 php配置文件

  php官网:www.php.net

  php加速器:APC,eAccelerator,Xcache,OPcache

  配置文件:/etc/php.ini,/etc/php.d/*.ini

  php.ini核心配置选项:http://php.net/manual/zh/ini.core.php

  php.ini配置选项列表:http://php.net/manual/zh/ini.list.php


  配置文件(php.ini)在php启动时被读取。对于服务器模块版本的php,仅在web服务器启动时读取一次。对于CGI和CLI版本,每次调用都会读取


18.4.3 php编译安装

  php编译安装步骤:

  a) 解决依赖关系

  配置好yum源(系统安装湖及Epel源)后执行如下命令:

1
2
3
yum -y groupinstall  'Desktop Platform Development'
yum -y  install  epel-release
yum -y  install  bzip2 -devel libmcrypt-devel libxml2-devel

  b) 编译安装php

1
2
3
4
5
6
cd  /usr/src
wget http: //cn2 .php.net /distributions/php-5 .6.30. tar .xz
xz -d php-5.6.30. tar .xz
tar  xf php-5.6.30. tar
cd  php-5.6.30 
. /configure  --prefix= /usr/local/php  --with-mysql= /usr/local/mysql  --with-openssl --with-mysqli= /usr/local/mysql/bin/mysql_config  -- enable -mbstring --with-freetype- dir  --with-jpeg- dir  --with-png- dir  --with-zlib --with-libxml- dir = /usr  -- enable -xml -- enable -sockets --with-apxs2= /usr/local/httpd/bin/apxs  --with-mcrypt --with-config- file -path= /etc  --with-config- file -scan- dir = /etc/php .d --with-bz2 -- enable -maintainer-zts --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd -- enable -opcache

  说明:

  这里为了支持apache的worker或event这两个MPM,编译时使用了--enable-maintainer-zts选项

   如果使用PHP5.3以上版本,为了链接mysql数据库,可以指定mysqlnd,这样在本机就不需要先安装mysql或mysql开发包了

  mysqlnd从php5.3开始可用,可以编译时绑定到它(而不用和具体的mysql客户端绑定形成依赖),但从php5.4开始它就是默认设置了

1
2
3
4
5
6
. /configure  --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd
make
#make test
make  install
echo  'export PATH=/usr/local/php/bin:$PATH'  /etc/profile .d /php .sh
/etc/profile .d /php .sh

  c) 为php提供配置文件

1
cp  php.ini-production  /etc/php .ini

  d) 编辑apache配置文件httpd.conf使其支持php

  添加如下两行:

1
2
AddType application /x-httpd-php  .php
AddType application /x-httpd-php-source  .phps

  定位至DirectoryIndex index.html,修改为:

1
DirectoryIndex index.php index.html

  而后重启httpd,或让其重新载入配置文件即可测试php是否已经可以正常使用

  e) 安装xcache,为php加速(php5.5及以下版本)

  安装xcache:

1
2
3
4
5
6
7
cd  /usr/src
wget http: //xcache .lighttpd.net /pub/Releases/3 .2.0 /xcache-3 .2.0. tar .bz2
tar  xf xcache-3.2.0. tar .bz2
cd  xcache-3.2.0
/usr/local/php/bin/phpize
. /configure  -- enable -xcache --with-php-config= /usr/local/php/bin/php-config
make  &&  make  install

  安装结束时,会出现类似如下行:

1
Installing shared extensions:  /usr/local/php/lib/php/extensions/no-debug-zts-20131226/

  编辑php.ini,整合php和xcache:

  首先将xcache提供的样例配置导入php.ini:

1
cat  xcache.ini >>  /etc/php .ini

  说明:xcache.ini文件在xcache的源码目录中

  接下来编辑/etc/php.ini,找到zend_extension开头的行,修改为如下行:

1
zend_extension =  /usr/local/php/lib/php/extensions/no-debug-zts-20131226/xcache .so


  注意:如果php.ini文件中有多条zend_extension指令行,需确保此新增的行排在第一位

  编辑/etc/php.ini,修改以下内容:

1
2
3
4
xcache.admin.user =  "admin"
#通过openssl passwd -1 PASSWORD命令生成密码,然后在http://xcache.lighttpd.net/demo/cacher/mkpassword.php页面加密密码
xcache.admin.pass =  "21232f297a57a5a743894a0e4a801fc3"
xcache.mmap_path =     "/tmp/xcache"


  创建/tmp/xcache文件并赋权:

1
2
touch  /tmp/xcache
chmod  777  /tmp/xcache


  重启httpd:

1
apachectl restart

  然后在phpinfo页面查看是否有xcache模块


  f) OPcache(5.5+版本加速)

  PHP5.5.0以后版本自带Opcache加速器,但默认情况下未启用。所以编译的使用我们想要启用该PHP加速器就应该添加参数 : –enable-opcache 来制定。

  对于已经编译安装了PHP5.5.0以上版本但当初又没有启用该加速器的用户可以像PHP添加模块一样编译添加。步骤如下:

1
2
3
4
cd  /usr/src/php-5 .6.30 /ext/opcache
/usr/local/php/bin/phpize
. /configure  --with-php-config= /usr/local/php/bin/php-config
make  &&  make  install


  最后它会告诉你opcache.so已编译成功,放在/usr/local/php/lib/php/extensions/no-debug-zts-20131226/目录下


  编辑php.ini文件,配置opcache

  vim /etc/php.ini

  修改或添加如下代码并保存退出:

1
2
3
4
5
6
7
8
9
[opcache]
zend_extension= /usr/local/php/lib/php/extensions/no-debug-zts-20131226/opcache .so
opcache. enable =1
opcache.enable_cli=1
opcache.memory_consumption=200
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=20000
opcache.revalidate_freq=1
opcache.fast_shutdown=1


  然后重启httpd服务,就可以用php -m命令或在phpinfo界面看到opcache已经开启了


  常用的opcache配置介绍:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
opcache. enable ={0|1} #关闭或开启opcache功能,默认为0(关闭)
 
opcache.enable_cli={0|1} #关闭或开启CLI
 
opcache.memory_consumption=528  #opcache可用的内存大小,单位为Mb,根据自身情况而定,决定了总共能够存储多少预编译的PHP代码
 
opcache.interned_strings_buffer=8  #zend optimizer + 暂存池中字符串的占内存总量,单位为MB,推荐设为8
 
opcache.max_accelerated_files=10000 #对多缓存文件限制, 最大缓存的文件数目在200到100000之间,命中率不到 100% 的话, 可以试着提高这个值,推荐设为4000
 
opcache.revalidate_freq=1  #Opcache会在一定时间内去检查文件的修改时间, 这里设置检查的时间周期, 默认为 2, 单位为秒。推荐设为60,注意,0是一直检查而不是关闭
 
opcache.fast_shutdown=1  #打开快速关闭, 打开这个在PHP Request Shutdown的时候回收内存的速度会提高
 
opcache.max_wasted_percentage=5  #内存“浪费”达到此值对应的百分比,就会发起一个重启调度。
 
opcache.use_cwd=0  #开启这条指令, Zend Optimizer + 会自动将当前工作目录的名字追加到脚本键上,以此消除同名文件间的键值命名冲突.关闭这条指令会提升性能,但是会对已存在的应用造成破坏
 
opcache.validate_timestamps=1  #开启文件时间戳验证
 
opcache.revalidate_path=0  #允许或禁止在 include_path 中进行文件搜索的优化
 
opcache.save_comments=1  #是否保存文件/函数的注释。如果apigen、Doctrine、ZF2、PHPUnit需要文件注释,推荐设为0
 
opcache.load_comments=1  #是否加载文件/函数的注释
 
opcache.enable_file_override=0  #允许覆盖文件存在(file_exists等)的优化特性
 
opcache.optimization_level=0xffffffff  #定义启动多少个优化过程
 
opcache.inherited_hack=1  #启用此Hack可以暂时性的解决”can’t redeclare class”错误
 
opcache.dups_fix=0  #启用此Hack可以暂时性的解决”can’t redeclare class”错误
 
opcache.blacklist_filename=  #设置不缓存的黑名单,不缓存指定目录下cache_开头的PHP文件。如/png/www/example.com/public_html/cache/cache_
 
opcache.max_file_size=0  #通过文件大小屏除大文件的缓存.默认情况下所有的文件都会被缓存
 
opcache.consistency_checks=0  #每 N 次请求检查一次缓存校验.默认值0表示检查被禁用了。由于计算校验值有损性能,这个指令应当紧紧在开发调试的时候开启
 
opcache.force_restart_timeout=180  #从缓存不被访问后,等待多久后(单位为秒)调度重启
 
opcache.error_log=  #错误日志文件名.留空表示使用标准错误输出(stderr)
 
opcache.log_verbosity_level=1  #将错误信息写入到服务器(Apache等)日志
 
opcache.preferred_memory_model=  #内存共享的首选后台.留空则是让系统选择
 
opcache.protect_memory=0  #防止共享内存在脚本执行期间被意外写入, 仅用于内部调试


  g) 启用服务器状态(编辑httpd.conf)

  mod_status模块可以让管理员查看服务器的执行状态,它通过一个HTML页面展示了当前服务器的统计数据。这些数据通常包括但不限于:

    处于工作状态的worker进程数

    空闲状态的worker进程数

    每个worker的状态,包括此worker已经响应的请求数,及由此worker发送的内容的字节数

    当前服务器总共发送的字节数

    服务器自上次启动或重启以来至当前的时长

    平均每秒钟响应的请求数、平均每秒钟发送的字节数、平均每个请求所请求内容的字节数

  启用状态页面的方法很简单,只需要在主配置文件中添加如下内容即可:

1
2
3
4
5
6
<Location  /server-status >
     SetHandler server-status
     Allow from all    #httpd-2.2版本使用此条授权
     Require all granted   #httpd-2.4版本使用此条授权
     #注意,Allow语句与Require语句二选一,不可同时使用
< /Location >


  需要提醒的是,这里的状态信息不应该被所有人随意访问。因此,应该限制仅允许某些特定地址的客户端查看。比如使用Require ip 172.16.0.0/16来限制仅允许指定网段的主机查看些页面。


  可以用http://ip/server-status来查看状态界面


18.4.4 配置以fpm方式工作的php

  a) 解决依赖关系

1
yum -y groupinstall   "X Software Development"

  若想让编译的php支持mcrypt扩展,执行以下命令:

1
yum -y  install  libmcrypt libmcrypt-devel mhash mhash-devel

  b) 编译安装php

1
2
3
4
5
6
7
8
9
cd  /usr/src
wget http: //cn2 .php.net /distributions/php-5 .5.38. tar .xz
xz -d php-5.5.38. tar .xz
tar  xf php-5.5.38. tar
cd  php-5.5.38
. /configure  --prefix= /usr/local/php5  --with-mysql= /usr/local/mysql  --with-openssl --with-mysqli= /usr/local/mysql/bin/mysql_config  -- enable -mbstring --with-freetype- dir  --with-jpeg- dir  --with-png- dir  --with-zlib --with-libxml- dir = /usr  -- enable -xml -- enable -sockets -- enable -fpm --with-mcrypt --with-config- file -path= /etc  --with-config- file -scan- dir = /etc/php .d --with-bz2
make  &&  make  install
 
cp  php.ini-production  /etc/php .ini


  c) 配置php-fpm

  为php-fpm提供SysV init脚本,并将其添加至服务列表:

1
2
3
4
cp  sapi /fpm/init .d.php-fpm  /etc/rc .d /init .d /php-fpm
chmod  +x  /etc/rc .d /init .d /php-fpm
chkconfig --add php-fpm
chkconfig php-fpm on


  为php-fpm提供配置文件:

1
cp  /usr/local/php/etc/php-fpm .conf.default  /usr/local/php/etc/php-fpm .conf


  编辑php-fpm的配置文件(/usr/local/php/etc/php-fpm.conf):

  配置fpm的相关选项为你所需要的值,并启用pid文件(如下最后一行):

1
2
3
4
5
pm.max_children = 50     #最多同时提供50个进程提供50个并发服务
pm.start_servers = 5     #启动时启动5个进程
pm.min_spare_servers = 2     #最小空闲进程数
pm.max_spare_servers = 8     #最大空闲进程数
pid =  /usr/local/php/var/run/php-fpm .pid


  启动php-fpm:

1
service php-fpm start

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

1
ps  aux| grep  php-fpm

  默认情况下,fpm监听在127.0.0.1的9000端口,也可以使用如下命令验证其是否已经监听在相应的套接字:

1
ss -tanlp | grep  php-fpm


18.4.5 配置httpd-2.4.9

  httpd-2.4.9配置:

  a) 启用httpd的相关模块

  在apache httpd 2.4以后已经专门有一个模块针对FastCGI的实现,此模块为mod_proxy_fcgi.so,它其实是作为mod_proxy.so模块的扩展,因此,这两个模块都要加载,编辑httpd.conf文件,加入以下两行内容:

1
2
LoadModule proxy_module modules /mod_proxy .so
LoadModule proxy_fcgi_module modules /mod_proxy_fcgi .so


  b) 配置虚拟主机支持使用fcgi

  在需要使用fcgi的虚拟主机中添加类似如下两行:

1
2
ProxyRequests Off #关闭正向代理
ProxyPassMatch ^/(.*\.php)$ fcgi: //127 .0.0.1:9000 /PATH/TO/DOCUMENT_ROOT/ $1

  如:

1
ProxyPassMatch ^/(.*\.php)$ fcgi: //127 .0.0.1:9000 /var/www/html/idfsoft .com/$1

  表示把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少需要知道运行的目录和URI

  所以这里直接在fcgi://127.0.0.1:9000后指明了这两个参数,其它参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定


  示例:

1
2
3
4
5
6
7
8
9
10
11
12
<VirtualHost *:80>
     DocumentRoot  "/var/www/html/idfsoft.com"
     ServerName idfsoft.com
     ServerAlias www.idfsoft.com
     ProxyRequests Off
     ProxyPassMatch ^/(.*\.php)$ fcgi: //127 .0.0.1:9000 /var/www/html/idfsoft .com/$1
     <Directory  "/var/www/html/idfsoft.com" >
         Options none
         AllowOverride none
         Require all granted
     < /Directory >
< /VirtualHost >


  c) 编辑apache的配置文件httpd.conf,让apache能识别php格式的页面,并支持php格式的主页

  添加如下两行:

1
2
AddType application /x-httpd-php  .php
AddType application /x-httpd-php-source  .phps

  定位至DirectoryIndex index.html,修改为:

1
DirectoryIndex index.php index.html

  而后重启httpd,或让其重新载入配置文件即可测试php是否已经可以正常使用

  

  注意:Apache httpd 2.4以前的版本中,要么把PHP作为apache的模块运行,要么添加一个第三方模块支持PHP-FPM实现










本文转自 忘情OK  51CTO博客,原文链接:http://blog.51cto.com/itchentao/1944964,如需转载请自行联系原作者
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
30天前
|
XML 运维 前端开发
LAMP架构调优(四)——资源压缩传输
LAMP架构调优(四)——资源压缩传输
14 2
|
30天前
|
运维 Linux Apache
LAMP架构调优(二)——修改Apache运行用户
LAMP架构调优(二)——修改Apache运行用户
197 1
|
1月前
|
运维 Linux Apache
LAMP架构调优(二)——修改Apache运行用户
LAMP架构调优(二)——修改Apache运行用户
12 0
|
24天前
|
运维 Linux Apache
LAMP架构调优(三)——模块的安装与调用
LAMP架构调优(三)——模块的安装与调用
9 0
|
25天前
|
运维 Linux Apache
LAMP架构调优(十)——Apache禁止指定目录PHP解析与错误页面优化
LAMP架构调优(十)——Apache禁止指定目录PHP解析与错误页面优化
197 2
|
28天前
|
运维 Linux Apache
LAMP架构调优(九)——Apache Rewrite功能实战
LAMP架构调优(九)——Apache Rewrite功能实战
12 1
|
28天前
|
运维 安全 Linux
LAMP架构调优(八)——Apache Worker模式调优
LAMP架构调优(八)——Apache Worker模式调优
9 0
|
29天前
|
缓存 运维 Linux
LAMP架构调优(七)——Apache Prefork模式调优
LAMP架构调优(七)——Apache Prefork模式调优
17 2
|
29天前
|
运维 网络协议 Linux
LAMP架构调优(六)——开启长链接
LAMP架构调优(六)——开启长链接
11 3
|
29天前
|
存储 缓存 运维
LAMP架构调优(五)——网页缓存设置
LAMP架构调优(五)——网页缓存设置
10 1