一、使用的程序包名称及版本:
httpd:2.4.29
mariadb-server:10.2.9
php:5.6.32
备注:httpd-2.4.x依赖于apr-1.4+以及apr-util-1.4+,而CentOS6.9 yum安装的apr和apr-util的版本均为1.3.9,httpd的版本为2.2.15,所以如果要在CentOS 6.9中使用httpd-2.4.x,只能重新源码编译安装
apr:Apache Portable Runtime,Apache运行时环境,可以理解为Apache虚拟机,主要为上层的应用程序提供一个可以跨越多操作系统平台使用的底层支持接口库。
二、准备工作:
1、 下载相关程序包:
- httpd-2.4.29,http://mirror.bit.edu.cn/apache/httpd/
- mariadb-10.2.9,https://downloads.mariadb.org/
- php-5.6.32,http://www.php.net/downloads.php
- phpMyAdmin-4.7.5-all-languages.zip,https://www.phpmyadmin.net/downloads/
- xcache-3.2.0,http://xcache.lighttpd.net/wiki/ReleaseArchive
2、 关闭iptables和SELinux
3、 服务器时间校对
4、 配置epel源
5、 安装开发环境程序包组:# yum -y groupinstall "Development Tools" "Server PlatformDevelopment"
6、 安装依赖程序包:# yum -y install pcre-devel expat-devel libxml2-devel bzip2-devel libmcrypt-devel curl-devel libpng-devel gmp-devel libc-client-devel recode-devel net-snmp-devel libtidy-devel libjpeg-devel freetype-devel readline-devel libicu-devel unzip
7、 配置相关库文件:# ln -sv /usr/lib64/libc-client.so /usr/lib/libc-client.so # ln -sv /usr/lib64/libldap* /usr/lib/
三、安装配置httpd-2.4.29:
1、 安装配置apr-1.6.2:
# tar -xf apr-1.6.2.tar.gz -C /usr/src
# cd /usr/src/apr-1.6.2
# vim configure --> 用#号注释第30951行代码$RM"$cfgfile"
# ./configure --prefix=/usr/local/apr16 --enable-threads --enable-posix-shm --enable-pool-concurrency-check --enable-other-child --disable-ipv6 --with-sendfile
# make && make install
# vim /etc/ld.so.conf.d/apr16.conf --> /usr/local/apr16/lib
# ldconfig
2、 安装配置apr-util-1.6.0:
# tar -xf apr-util-1.6.0.tar.gz -C /usr/src
# cd /usr/src/apr-util-1.6.0
# ./configure --prefix=/usr/local/apr-util16 --with-apr=/usr/local/apr16 --with-crypto
# make && make install
# vim /etc/ld.so.conf.d/apr-util16.conf --> /usr/local/apr-util16/lib
# ldconfig
3、 编译安装httpd-2.4.29:
# groupadd -r apache
# useradd -r -g apache apache
# id apache
# tar -xf httpd-2.4.29.tar.gz -C /usr/src
# cd /usr/src/httpd-2.4.29
# ./configure --prefix=/usr/local/apache24 --enable-modules=all --enable-mods-shared=all --enable-authn-dbm --enable-authn-anon --enable-authn-dbd --enable-authn-socache --enable-authz-dbm --enable-authz-owner --enable-authz-dbd --enable-authnz-fcgi --enable-auth-form --enable-auth-digest --enable-allowmethods --enable-isapi --enable-file-cache --enable-cache --enable-cache-disk --enable-cache-socache --enable-socache-shmcb --enable-socache-dbm --enable-socache-memcache --enable-so --enable-watchdog --enable-macro --enable-dbd --enable-dumpio --enable-echo --enable-case-filter --enable-case-filter-in --enable-buffer --enable-data --enable-ratelimit --enable-ext-filter --enable-request --enable-include --enable-reflector --enable-substitute --enable-sed --enable-deflate --enable-http --enable-log-forensic --enable-logio --enable-luajit --enable-mime-magic --enable-cern-meta --enable-expires --enable-ident --enable-usertrack --enable-unique-id --enable-remoteip --enable-proxy --enable-proxy-connect --enable-proxy-ftp --enable-proxy-http --enable-proxy-fcgi --enable-proxy-scgi --enable-proxy-fdpass --enable-proxy-wstunnel --enable-proxy-ajp --enable-proxy-balancer --enable-proxy-express --enable-proxy-hcheck --enable-session --enable-session-cookie --enable-session-crypto --enable-session-dbd --enable-slotmem-shm --enable-slotmem-plain --enable-ssl --enable-dialup --enable-lbmethod-byrequests --enable-lbmethod-bytraffic --enable-lbmethod-bybusyness --enable-lbmethod-heartbeat --enable-mpms-shared=all --enable-heartbeat --enable-heartmonitor --enable-dav --enable-asis --enable-info --enable-suexec --enable-cgid --enable-cgi --enable-dav-fs --enable-dav-lock --enable-vhost-alias --enable-negotiation --enable-imagemap --enable-actions --enable-speling --enable-userdir --enable-rewrite --with-apr=/usr/local/apr16 --with-apr-util=/usr/local/apr-util16 --with-pcre --with-z --with-ssl --with-mpm=event
# make -j 4 && make install
# ls /usr/local/apache24
备注:.so扩展名的文件为模块文件,静态加载的模块不会显示在modules目录下,静态加载的模块会内嵌在系统里。动态加载的模块都会显示在modules目录下,启用这些模块,只需要在主配置文件中使用LoadModule命令装载这些模块即可。
4、 配置httpd-2.4.29:
(1)导出二进制程序目录至PATH环境变量:
# vim /etc/profile.d/httpd24.sh --> export PATH=/usr/local/apache24/bin:$PATH
# . /etc/profile.d/httpd24.sh
# echo $PATH
(2)导出头文件:# ln -sv /usr/local/apache24/include /usr/include/httpd24
(3)导出man帮助文档:# vim /etc/man.config --> MANPATH /usr/local/apache24/man
(4)配置使用service命令控制httpd服务:# cp /usr/local/apache24/bin/apachectl /etc/init.d/httpd24
备注:为了不和yum方式安装的httpd冲突,所以服务脚本名称叫httpd24,如果仍命名为httpd,以后使用命令# yum -y install httpd后,服务脚本会被httpd覆盖,不过此httpd24只支持start| restart | stop
(5)修改主配置文件httpd.conf:
# cd /usr/local/apache24/conf
# cp httpd.conf httpd.conf.bak
# vim httpd.conf
- 新增代码:ServerName localhost:80
- 将参数User和Group的值都修改为apache,表示以apache用户和组的身份运行httpd
- #号注释第147行LoadModulesession_cookie_module modules/mod_session_cookie.so
- #号注释第148行LoadModulesession_crypto_module modules/mod_session_crypto.so
- #号注释第149行LoadModulesession_dbd_module modules/mod_session_dbd.so
# httpd -t
(6)配置httpd开机自启:
# vim /etc/init.d/httpd24,在首行#!/bin/sh下,新增如下2行代码:
# chkconfig: 2345 95 60
# description: Apache HTTP Server 2.4.29
# chkconfig --add httpd24
# chkconfig httpd24 on
# chkconfig --list httpd24
5、 启动httpd服务,并在浏览器中输入192.168.1.144:
# service httpd24 start
# ss -tnl | grep :80
# ps -ef | grep httpd
# httpd -M | grep mpm --> mpm_event_module (shared)
四、安装配置二进制格式的mariadb-10.2.9:
1、 虚机添加新硬盘,创建LVM逻辑卷,并创建用于存放mariadb数据的目录:
(1)虚机新硬盘添加完成后,需要重启服务器,新硬盘才能被识别
(2) 创建LVM分区:
# partx -a /dev/sdb --> 忽略错误提示
# cat /proc/partitions
(3)创建pv:# pvcreate /dev/sdb1 # pvs
(4)创建vg:# vgcreate mysqlvg /dev/sdb1 # vgs
(5)创建lv:# lvcreate -l +100%FREE mysqlvg -n mysqldata # lvs
(6)格式化LVM分区:# mke2fs -t ext4 /dev/mysqlvg/mysqldata
(7)创建挂载点:# mkdir -pv /data
(8)开机自动挂载:# vim /etc/fstab --> /dev/mysqlvg/mysqldata /data ext4 defaults 0 0
(9)挂载分区并查看分区信息:# mount -a # mount # df -Th
(10)创建用于存放mariadb数据的目录:# mkdir -pv /data/mysqldata
(11)创建mysql用户和组:# groupadd -r mysql # useradd -r -g mysql mysql # id mysql
(12)设置数据目录权限:# cd /data # chown -R mysql.mysql mysqldata # chmod -R o-rx mysqldata
2、 安装mariadb-10.2.9:
# tar -xf mariadb-10.2.9-linux-x86_64.tar.gz -C /usr/local
# cd /usr/local
# mv mariadb-10.2.9-linux-x86_64/ mysql
# cd mysql
# chown -R mysql.mysql .
3、 配置mariadb-10.2.9:
(1)导出二进制程序目录至PATH环境变量中:
# vim /etc/profile.d/mariadb.sh --> export PATH=/usr/local/mysql/bin:$PATH
# . /etc/profile.d/mariadb.sh
# echo $PATH
# mysql --version
(2)导出头文件:# ln -sv /usr/local/mysql/include/mysql /usr/include/mysql
(3)导出库文件:# vim /etc/ld.so.conf.d/mariadb.conf --> /usr/local/mysql/lib # ldconfig
(4)导出man帮助文档:# vim /etc/man.config --> MANPATH /usr/local/mysql/man
(5)创建并修改my.cnf配置文件:
# find / -name my.cnf
# mv /etc/my.cnf /etc/my.cnf.bak //如果系统中事先已存在my.cnf,则将其重命名备份
# cp /usr/local/mysql/support-files/my-innodb-heavy-4G.cnf /etc/my.cnf
备注:MariaDB的配置文件my.cnf是集中式的配置文件,可以为多个程序提供配置,包括client、mysql、mysqld等等。查找配置文件的顺序依次为:/etc/my.cnf --> /etc/mysql/my.cnf --> $BASEDIR/my.cnf --> --defaults-extra-file=/PATH/TO/CONF_FILE --> ~/.my.cnf。如果发现多个my.cnf配置文件,那最后一个被读到的配置文件将会最终生效,即如果存在~/.my.cnf配置文件,那么MariaDB服务器的配置以此文件为准。
# vim/etc/my.cnf
- 在[mysqld]配置段中增加如下代码:
basedir = /usr/local/mysql
datadir = /data/mysqldata
user = mysql
innodb_file_per_table = on
skip_name_resolve = on
- 在[mysqld]配置段中注释如下代码:
注释thread_concurrency = 8
注释innodb_additional_mem_pool_size = 16M
(6)初始化mariadb-server:
# ls /data/mysqldata //确认数据存放目录必须为空
# /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysqldata --defaults-file=/etc/my.cnf --skip-name-resolve
# ls /data/mysqldata
(7)使用service命令控制mariadb-server,并设置开机自启:
# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
# vim /etc/init.d/mysqld,修改如下2行内容:
- 将第46行basedir参数的值设置为/usr/local/mysql
- 将第47行datadir参数的值设置为/data/mysqldata
# chkconfig --add mysqld
# chkconfig mysqld on
# chkconfig --list mysqld
4、 启动mariadb-server:
# service mysqld start
# ss -tnl | grep :3306
# ps aux | grep mysqld
5、 mariadb-server安全设置:# mysql_secure_installation
备注:用于设置root用户密码、删除匿名用户、是否允许root用户远程登录、删除测试数据库、重载授权表
# ls /data/mysqldata
6、 允许远程主机访问mariadb-server:
出于安全考虑,mariadb-server默认是不允许远程主机直接访问的
# mysql -uroot -p //输入root用户密码
MariaDB [(none)]> grant all privileges on *.* to ‘root‘@‘%‘ identified by‘123456‘ with grant option;
MariaDB [(none)]> flush privileges;
五、安装配置php-5.6.32:
1、 编译安装php-5.6.32:
# find / -name php.ini
# mv /etc/php.ini /etc/php.ini.bak //如果系统中事先已存在php.ini,则将其重命名备份
# tar -xf php-5.6.32.tar.xz -C /usr/src
# cd /usr/src/php-5.6.32
# ./configure --prefix=/usr/local/php56 --with-apxs2=/usr/local/apache24/bin/apxs --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php56.d --with-mysql=mysqlnd --with-mysql-sock=/tmp/mysql.sock --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-libxml-dir --with-openssl --with-kerberos --with-pcre-regex --with-pcre-dir --with-zlib --with-zlib-dir --with-bz2 --with-curl --with-ldap --with-ldap-sasl --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-gettext --with-mhash --with-mcrypt --with-snmp --with-readline --with-recode --with-tidy --with-xmlrpc --with-iconv-dir --with-pear --enable-sysvmsg --enable-sysvsem --enable-sysvshm --disable-ipv6 --enable-mysqlnd --enable-fpm --enable-phpdbg --enable-bcmath --enable-calendar --enable-exif --enable-ftp --enable-gd-native-ttf --enable-intl --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-wddx --enable-zip --enable-zend-signals
# make -j 4 && make install
2、 配置php-5.6.32:
(1)创建并修改php.ini配置文件:# cp /usr/src/php-5.6.32/php.ini-production /etc/php.ini
(2)导出二进制程序目录至PATH环境变量中:
# vim /etc/profile.d/php56.sh --> export PATH=/usr/local/php56/sbin:/usr/local/php56/bin:$PATH
# . /etc/profile.d/php56.sh
# echo $PATH
六、配置httpd-2.4.29支持php-5.6.32(以下两种方法二选一):
1、 把php编译成httpd的模块:
(1)修改主配置文件httpd.conf:
# vim /usr/local/apache24/conf/httpd.conf
- DirectoryIndex index.php index.html
- 增加代码:AddType application/x-httpd-php .php
- 确认模块已加载:LoadModule php5_module modules/libphp5.so
# httpd -t
# service httpd24 restart
# httpd -M | grep php --> php5_module (shared)
(2)创建测试页:
# vim /usr/local/apache24/htdocs/index.php
<?php
$conn=mysqli_connect("127.0.0.1","root","123456");
if ($conn)
echo "Success";
else
echo "Failure";
mysqli_close();
phpinfo();
?>
备注:如果在新版本php中使用旧版本php的mysql_connect()函数连接MariaDB,会提示undefined function mysql_connect()。从php 5.5开始,MariaDB就不推荐使用mysql_connect()函数,属于废弃函数,php 7中已经彻底不支持了,其增加了mysqli的函数功能。从某种意义上讲,mysqli是mysql系统函数的增强版,更稳定、更高效、更安全,属于面向对象,用对象的方式操作驱动MariaDB数据库。
浏览器中输入192.168.1.144/index.php:
未加载XCache相关模块
2、 通过fpm(FastCGI)方式,将php作为独立的服务运行:
(1)创建并修改php-fpm.conf配置文件:
# cd /usr/local/php56/etc
# cp php-fpm.conf.default php-fpm.conf
# vim php-fpm.conf,修改如下参数的值(参考):
- pm.max_children= 1024
- pm.start_servers= 16
- pm.min_spare_servers= 5
- pm.max_spare_servers= 20
(2)为php-fpm提供SysV init脚本,并将其添加至服务列表:
# cp /usr/src/php-5.6.32/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
# chmod +x /etc/init.d/php-fpm
# chkconfig --add php-fpm
# chkconfig php-fpm on
# chkconfig --list php-fpm
(3)启动php-fpm:
# service php-fpm start
# ss -tnlp | grep php-fpm //默认情况下,fpm监听127.0.0.1的9000端口
# ps aux | grep php-fpm
(4)修改主配置文件httpd.conf:
# vim /usr/local/apache24/conf/httpd.conf
- DirectoryIndex index.php index.html
- 增加代码:AddType application/x-httpd-php .php
- #号禁用模块:LoadModule php5_module modules/libphp5.so
- 装载proxy模块:LoadModule proxy_module modules/mod_proxy.so
- 装载proxy_fcgi模块:LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
- 配置反向代理(也可在虚拟主机中配置),在末尾新增如下2行代码:
ProxyRequestsOff //关闭正向代理
ProxyPassMatch^/(.*\.php)$ fcgi://127.0.0.1:9000/usr/local/apache24/htdocs/$1
# httpd -t
# service httpd24 restart
(5)如上述所示创建测试页,并在浏览器中输入192.168.1.144/index.php:
未加载XCache相关模块
# service mysqld stop --> Failure,表示php与mariadb-server通信正常
七、安装配置phpMyAdmin:
phpMyAdmin是一个以PHP为基础,以Web-Base方式架构在网站主机上的MariaDB的数据库管理工具,让管理员可用WebGUI接口管理MariaDB数据库。
# unzip -q phpMyAdmin-4.7.5-all-languages.zip
# cp -a phpMyAdmin-4.7.5-all-languages/ /usr/local/apache24/htdocs
# cd /usr/local/apache24/htdocs
# mv phpMyAdmin-4.7.5-all-languages/ pma
# cd pma
# cp config.sample.inc.php config.inc.php
# openssl rand -base64 8 --> uRYO7/xG88k=
# vim config.inc.php --> $cfg[‘blowfish_secret‘] = ‘uRYO7/xG88k=‘;
# service httpd24 restart
浏览器中输入192.168.1.144/pma:
用户名和密码均为MariaDB数据库的用户名和密码
八、使用XCache优化性能:
XCache是一个又快又稳定的PHP Opcode缓存器,它能够提高PHP的性能。通过把编译PHP后的数据缓冲到共享内存,从而避免重复的编译过程,能够直接使用缓冲区已编译的代码从而提高速度,降低服务器负载。
1、 未加载XCache模块时测试性能:# ab -c 20 -n 1000 http://192.168.1.144/pma/index.php
2、 编译安装XCache:
# tar -xf xcache-3.2.0.tar.gz -C /usr/src
# cd /usr/src/xcache-3.2.0
# phpize //出现configure脚本
# ./configure --enable-xcache --with-php-config=/usr/local/php56/bin/php-config
# make && make install
3、 整合php和XCache:
# mkdir -pv /etc/php56.d
# cp /usr/src/xcache-3.2.0/xcache.ini /etc/php56.d
# vim /etc/php56.d/xcache.ini
- 若把php编译成httpd的模块,则:# service httpd24 restart
- 若通过fpm(FastCGI)方式,将php作为独立的服务运行,则:# service php-fpm restart
刷新页面,已加载XCache相关模块:
4、 加载XCache模块时测试性能:# ab -c 20 -n 1000 http://192.168.1.144/pma/index.php
性能提升了近5倍