php与apache协做有三种模式:CGI、modules、FastCGI。
在CGI模式下,用户请求php文件时,apache会启动响应进程,调用php处理器处理请求,而后将结果返回给客户端。用户响应及处理由前端apache服务器完成;
在modules模式下,php解析器做为apache的一个模块,php处理器与web服务器一块儿运行处理用户请求。用户响应由apache处理,请求处理由apache与php处理器协同完成;
在fastcgi模式下,apache调用proxcy模块,发挥代理做用,直接将用户请求交由后端的php处理器(php-fpm)处理,而后将从后端php-fpm传来的处理结果返回给用户。用户响应由apache处理,请求处理php-fpm完成;php
本文档演示php以modules模式工做的LAMP。
安装流程:httpd--->mariadb--->php--->phpMyadmin--->Xcachehtml
时间:2017年9月24日前端
1、软件环境:mysql
IP:192.168.1.67;
Hostname:centos69-2.surmount.net;
Linux:CentOS release 6.9 (Final);
Apache:httpd-2.4.27
MariaDB:mariadb-5.5.57
PHP:php-5.6.31
其余:apr-1.6.2;apr-util-1.6.0;phpMyAdmin-4.7.4-all-languages;xcache-3.2.0linux
2、LAMP搭建:web
2-1:环境准备:sql
2-1-1:配置网络yum源:
# wget -O /etc/yum.repos.d/CentOS-Base-Ali.repo http://mirrors.aliyun.com/repo/Centos-6.repo
# sed -i 's/$releasever/6/g' /etc/yum.repos.d/CentOS-Base-Ali.repo 数据库
2-1-2:配置epel源:
# vim /etc/yum.repos.d/epel.repo
[epel]
name=epel
baseurl=https://mirrors.ustc.edu.cn/epel/6Server/x86_64/
gpgcheck=0
enabled=1apache
2-1-3:配置服务器软件环境:
# yum groupinstall "Development Tools" "Server Platform Development" -yvim
2-2:安装及配置Apache:
2-2-1:解决httpd依赖关系,编译安装apr及apr-util:
# tar xf apr-1.6.2.tar.bz2
# cd apr-1.6.2
# ./configure --prefix=/usr/local/apr
# make -j 2 && make install
# tar xf apr-util-1.6.0.tar.bz2
# cd apr-util-1.6.0
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
......
xml/apr_xml.c && touch xml/apr_xml.lo
xml/apr_xml.c:35:19: error: expat.h: No such file or directory
make[1]: *** [xml/apr_xml.lo] Error 1 make[1]: *** Waiting for unfinished jo
......
--->报错后,分析可能缺乏expat的开发库,安装expat-devel软件包后从新编译成功。
# yum install expat-devel -y
# rm -rf apr-util-1.6.0
# tar xf apr-util-1.6.0.tar.bz2
# cd apr-util-1.6.0
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
# make -j 2 && make install
--->附:apache官方对APR的介绍:
The mission of the Apache Portable Runtime (APR) project is to create and maintain software libraries that provide a predictable and consistent interface to underlying platform-specific implementations. The primary goal is to provide an API to which software developers may code and be assured of predictable if not identical behaviour regardless of the platform on which their software is built, relieving them of the need to code special-case conditions to work around or take advantage of platform-specific deficiencies or features.
2-2-2:安装httpd其余依赖软件包及须要用的软件包:
# yum install pcre-devel httpd -y
--->pcre-devel提供正则模式匹配库,httpd只为提供httpd启动脚本模板,用完后删除。
2-2-3:编译安装apache:
# tar xf httpd-2.4.27.tar.bz2
# cd httpd-2.4.27
# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=event
# make -j 2 && make install
--->MPM模块知识补充:
(1)构建MPM为静态模块:
在所有平台中,MPM均可以构建为静态模块。在构建时选择一种MPM,连接到服务器中。若是要改变MPM,必须从新构建。为了使用指定的MPM,请在执行configure脚本时,使用参数 --with-mpm=NAME。NAME是指定的MPM名称。编译完成后,可使用 ./httpd -l 来肯定选择的MPM。此命令会列出编译到服务器程序中的全部模块,包括MPM。
(2)构建 MPM 为动态模块:
在Unix或相似平台中,MPM能够构建为动态模块,与其它动态模块同样在运行时加载。构建MPM为动态模块容许经过修改LoadModule指令内容来改变MPM,而不用从新构建服务器程序。在执行configure脚本时,使用--enable-mpms-shared选项便可启用此特性。当给出的参数为all时,全部此平台支持的MPM模块都会被安装。还能够在参数中给出模块列表。默认MPM,能够自动选择或者在执行configure脚本时经过--with-mpm选项来指定,而后出如今生成的服务器配置文件中。编辑LoadModule指令内容能够选择不一样的MPM。
2-2-4:为httpd2.4提供启停脚本:
# cd /etc/rc.d/init.d
# cp httpd httpd24
# vim httpd24
......
apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/bin/httpd}
......
pidfile=${PIDFILE-/usr/local/apache/logs/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd24}
......
# chkconfig --add httpd24
# chkconfig --list | grep httpd24
2-2-5:配置apache:
# httpd -t
--->注:此语法检测的为rpm包安装的httpd,非编译安装的httpd。
# vim /etc/profile.d/httpd.sh
export PATH=/usr/local/apache/bin:$PATH
# . /etc/profile.d/httpd.sh
# httpd -t
# hash
hits command
1 /usr/local/apache/bin/httpd
--->注:此语法检测编译安装的httpd。
# vim /etc/httpd24/httpd.conf
......
ServerName centos69-2.surmount.net:80
......
LoadModule deflate_module modules/mod_deflate.so
.....
--->修改主机名,启用deflate模块(做用:容许服务器在将输出内容发送到客户端之前进行压缩,以节约带宽。),其余暂时保持默认。
# httpd -t
2-2-6:启动apache、访问测试:
# /etc/init.d/httpd24 start
# ss -tanl
# ps -ef | grep httpd
root 31142 1 0 22:46 ? 00:00:00 /usr/local/apache/bin/httpd
daemon 31144 31142 0 22:46 ? 00:00:00 /usr/local/apache/bin/httpd
# httpd -M | grep event
mpm_event_module (shared)
--->event模块已启动
http://192.168.1.69
It works!
# yum remove httpd -y
--->配置完成,删除使用完毕的httpd软件包。
2-3:安装及配置MariaDB:
2-3-1:准备数据存储的文件系统:
# fdisk /dev/sdb
n--->p--->1--->Enter--->+2G--->t--->8e--->w
# partx -a /dev/sdb
# yum install lvm2 -y
# pvcreate /dev/sdb1
# vgcreate dbvg /dev/sdb1
# lvcreate -L 2G -n dblv dbvg
# yum install xfsprogs -y
# modprobe xfs
# modinfo xfs
# mkfs.xfs /dev/dbvg/dblv
# mkdir -pv /dbdata
# vim /etc/fstab
......
/dev/dbvg/dblv /dbdata xfs defaults 0 0
# mount -a
--->划分一个2GB的分区,建立lv,便于扩展,格式化为xfs文件系统,设置开机自动挂载,用于存储数据。
2-3-2:建立数据库用户:
# mkdir -pv /dbdata/data
# groupadd -r mysql
# useradd -g mysql -r -s /sbin/nologin -M -d /dbdata/data mysql
# chown -R mysql:mysql /dbdata/data/
2-3-3:初始化安装MariaDB:
# tar xf mariadb-5.5.57-linux-x86_64.tar.gz -C /usr/local
# cd /usr/local/
# ln -sv mariadb-5.5.57-linux-x86_64 mysql
# cd mysql
# chown -R root:mysql /usr/loca/mysql/*
# /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/dbdata/data
2-3-4:为MariaDB提供启停脚本:
# ls /dbdata/data/
# cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
2-3-5:配置MariaDB:
# mkdir -pv /etc/mysql
# cp /usr/local/mysql/support-files/my-large.cnf /etc/mysql/my.cnf
# vim /etc/mysql/my.cnf
......
thread_concurrency = 8
datadir = /dbdata/data
innodb_file_per_table = on
skip_name_resolve = on
......
--->thread_concurrency的值为CPU个数的2倍;/dbdata/data为数据文件存储的位置;启用InnoDB引擎独立表空间;跳过域名反解。
2-3-6:启动MariaDB,设置DB的root用户密码:
# /etc/init.d/mysqld start
# /usr/local/mysql/bin/mysql
MariaDB [(none)]> use mysql
MariaDB [mysql]> UPDATE user SET password=PASSWORD('jingpei') WHERE User='root';
MariaDB [mysql]> SELECT User,Host,Password FROM user;
MariaDB [mysql]> DROP USER ''@'localhost';
MariaDB [mysql]> DROP USER ''@'centos69-2.surmount.net';
MariaDB [mysql]> FLUSH PRIVILEGES;
2-3-7:导出man手册文件、头文件、输出库文件、路径:
# vim /etc/man.config
......
MANPATH /usr/local/mysql/man
--->输出man手册至man命令的查找路径;
# ln -sv /usr/local/mysql/include/mysql /usr/include/mysql
--->输出头文件至系统头文件路径/usr/include;
# echo '/usr/local/mysql/include' > /etc/ld.so.conf.d/mysql.conf
# ldconfig
--->输出mysql的库文件给系统库查找路径;
# vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin/:$PATH
# source /etc/profile.d/mysql.sh
--->修改PATH环境变量,让系统能够直接使用mysql的相关命令;
2-4:安装及配置PHP(PHP为apache的模块):
2-4-1:安装PHP依赖的软件包:
# yum install bzip2-devel -y
2-4-2:编译安装PHP:
# tar xf php-5.6.31.tar.bz2
# cd php-5.6.31
# ./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/apache/bin/apxs --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts
......
configure: error: xml2-config not found. Please check your libxml2 installation.
--->出现一个error,分析多是缺失libxml2-devel软件包:
# yum install libxml2-devel -y
# ./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/apache/bin/apxs --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts
......
libtool: warning: remember to run 'libtool --finish /root/sources/php-5.6.31/libs'
--->出现一个warning:
# make && make install
2-4-3:为php提供配置文件:
# cp php.ini-production /etc/php.ini
--->说明:
一、这里为了支持apache的worker或event这两个MPM,编译时使用了--enable-maintainer-zts选项。
二、若是使用PHP5.3以上版本,为了连接MySQL数据库,能够指定mysqlnd,这样在本机就不须要先安装MySQL或MySQL开发包了。mysqlnd从php 5.3开始可用,能够编译时绑定到它(而不用和具体的MySQL客户端库绑定造成依赖),但从PHP 5.4开始它就是默认设置了。
# ./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd
2-4-4:配置apache,使其支持php:
# cd /etc/httpd24/
# cp httpd.conf{,.bak}
# vim httpd.conf
......
LoadModule php5_module modules/libphp5.so
.....
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
......
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
......
# /etc/init.d/httpd24 restart
# httpd -M | grep php
php5_module (shared)
2-4-5:创建php页面,并测试php与DB的链接:
# vim /usr/local/apache/htdocs/index.php
<?php
$link = mysql_connect('localhost', 'root', 'jingpei');
if (!$link)
{
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($link);
phpinfo()
?>
2-4-6:访问测试:
http://192.168.1.67/index.php
Connected successfully
PHP Version 5.6.31
3、安装phpMyAdmin:
3-1:phpMyAdmin简介:
phpMyAdmin,是MySQL或MariaDB数据库的GUI管理工具,以php为基础,以web为工做形式。
3-2:phpMyAdmin安装:
# unzip phpMyAdmin-4.7.4-all-languages.zip
# mv phpMyAdmin-4.7.4-all-languages /usr/local/apache/htdocs/pma
# cd /usr/local/apache/htdocs/pma
# cp config.sample.inc.php config.inc.php
# vim config.inc.php
......
$cfg['blowfish_secret'] = '1qazxsw23edcvfr45tgbnhy67ujm';
......
3-3:访问测试:
http://192.168.1.67/pma
4、安装xcache,为php加速:
4-1:安装前压力测试:
# ab -c 20 -n 100 http://192.168.1.67/pma/index.php
--->记录每秒响应次数,便于对比。
4-2:安装及配置xcache:
# 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
......
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20131226/
# mkdir -pv /etc/php.d
# cp /root/sources/xcache-3.2.0/xcache.ini /etc/php.d/
# vim /etc/php.d/xcache.ini
extension = /usr/local/php/lib/php/extensions/no-debug-zts-20131226/xcache.so
......
xcache.admin.enable_auth = off
# /etc/init.d/httpd24 restart
http://192.168.1.67/index.php
--->在打开的页面里找到xcache功能。
4-3:安装后压力测试及对比
--->测试环境:
CPU:Intel(R) Core(TM) i3-4160 CPU @ 3.60GHz
内存:512MB
# ab -c 20 -n 100 http://192.168.1.67/pma/index.php
......
Requests per second: 49.72 [#/sec] (mean)
......
# ab -c 20 -n 500 http://192.168.1.67/pma/index.php
......
Requests per second: 195.00 [#/sec] (mean)
--->经屡次压力测试比较,大约提升3-4倍响应速度。