本章blog主要介绍了[LAMP] Linux (Centos)LAMP环境搭建,LAMP源码安装及LAMP架构原理详解,并分别部署php与apache不同组合方式的LAMP案例。

 

LAMP Server 


  • LAMP简介

LAMP网站框架是目前国际上流行的Web服务架构,该框架包括GNU / Linux 操作系统,Apache HTTP服务器,MySQL 类关系型数据库(RDBMS)以及PHP编程语言。所有组成产品均属于开源类软件 ,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,使其更适用于构建动态网站及开发Web应用程序, 现已成为国际流行的框架架构。

目前很多流行的商业应用都是采取这个架构,和Java/J2EE架构相比,LAMP具有Web资源丰富、轻量、快速开发等特点,与微软的.NET架构相比,LAMP具有通用、跨平台、高性能、低价格的优势,因此LAMP无论是性能、质量还是价格都是企业搭建网站的首选平台。

  • LAMP组件

GNU / Linux 操作系统: 

Linux是一种类似Unix的计算机操作系统,Linux操作系统有很多个不同的发行版,如Red Hat 、SUSE 、FreeBSD、Debian、CentOS等。

Apache HTTP服务器:

LAMP的HTTP服务器的角色除了由Apache提供外,还包括其他如nginx等的Web服务器 ;其中,Apache负责传递PHP及cgi等动态语言,Nginx提供负载均衡、反向解析及容错功能,彼此配合使用,成为HTTP服务器的配置首选模式。

MySQL 类关系型数据库(RDBMS):

MySQL作为LAMP的关系数据库管理系统(RDBMS)的原始角色已经由其他RDBMS(如MariaDB)甚至NoSQL数据库(如MongoDB)逐步取代。MariaDB由MySQL的创始人Michael Widenius主导开发,其属于MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可,且MariaDB完全兼容MySQL;MongoDB是一个Web规模的开源NoSQL数据库 。

php编程语言:

 

PHP作为LAMP的应用程序编程语言的原始角色,也逐步由其他语言(如Perl和Python)共同执行。PHP是一种服务器端脚本语言,专为Web开发而设计。PHP代码由web服务器提供的PHP模块编译,支持将PHP命令直接嵌入到HTML源文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;Perl是一系列高级,通用,解释的动态编程语言;Python是一中面向对象的的通用型高级编程语言,Python支持多种编程范例,包括面向对象,命令式,功能和过程范式。

缓存或加速器:

Apache提供了自己的缓存模块,也可以使用外加的Squid模块进行缓存,这两种方式均可以有效的提高Apache的访问响应能力。PHP的加速可使用xcache加速器,优化和缓存php动态内容,提升了PHP脚本的缓存性能。Memcached是一个分布式的内存对象缓存系统,通常用于动态Web应用以减轻数据库负载。

  • LAMP架构原理

客户端发送http request 请求 ,服务器(Apache)接受web请求;

Apache判断客户端请求的资源是否为静态请求。若是静态请求,则Apache直接将客户端请求的静态资源(.html, .htm  .shtml等文件),通过Http response的形式传送给客户端;

若为php动态请求,则通过CGI协议将客户端的php请求传输给PHP程序,然后由php程序调用php解析器执行php请求。

PHP在执行php请求时判断是否会依赖mysql数据库。若不依赖mysql数据库,则由php解析器直接执行php相关脚本,将解析后的脚本再次通过CGI协议返传送给Apache.服务器,再执行“静态请求”的流程;

若依赖mysql数据库,则php程序通过php-mysql 驱动与mysql进行关联  ,获取相关数据 ,然后将其返还给php解释器 ,再次执行“不依赖mysql数据库”的流程。

  • apache与php组合方式

Module机制:php直接以httpd的模块扩展的方式运行,php作为httpd功能的一部分。启动httpd进程时 ,亦开启了php功能。其中prefork模式依赖libphp5.so库 ,worker、event模式依赖libphp5-zts.so库 

CGI机制:php工作在独立的进程,当需要解析php请求时,由httpd唤醒php进程。因多个php请求,会启动多个php进程,需要耗费资源,整体性能不如module机制

Fast-CGI机制:生成php-fpm服务 ,由服务php-fpm管理php进程。基于套接字与apache联系 ,与apache work机制类似 ,有父进程,子进程,空闲进程等 ,大大提高了php处理能力。

  • LAMP服务器(server)实验搭建

根据apache与php组合的不同方式,下面将演示LAMP编译安装实验:实验一、 php 以module 模式访问 ,实验二 、配置apache 与fpm方式 的php 。

系统:Centos 6.6 

软件:httpd-2.4.34 + mysql-5.5.61 + php-5.6.36 

编译环境:安装LAMP相关依赖环境,包括“Server PlatForm Development”, “Development tools”,关闭selinux 和 iptables 功能

实验目的:编译安装LAMP,通过不同的方式,分别实现php 以 modeule 方式访问和 以Fast-CGI机制下运行  。

 

LAMP编译安装,配置php 以 module 模式访问


 

一、配置编译环境 ,安装“Server PlatForm Development”, “Development tools”,关闭selinux 和 iptables   

[root@VM ~]# yum groupinstall "Development tools" -y    # 安装包组开发工具
[root@VM ~]# yum groupinstall "Server Platform Development" -y # 安装包组服务开发环境 [root@VM ~]# vi /etc/selinux/config # 修改配置文件,关闭selinux功能 SELINUX=disabled # 设定为disabled #SELINUXTYPE=targeted # 注释该项,行首添加# [root@VM ~]# chkconfig iptables off # 禁止开机自启动iptables功能 [root@VM ~]# chkconfig ip6tables off [root@VM ~]# service iptables stop # 停止iptables 功能 [root@VM ~]# service ip6tables stop
 

     

二、编译安装Apache

  • 编译安装apr(apr-1.6.3)

     

下载地址:http://download.nextag.com/apache//apr/apr-1.6.3.tar.gz    

[root@VM ~]# tar xf apr-1.6.3.tar.gz      
[root@VM ~]# cd apr-1.6.3 [root@VM apr-1.6.3]# ./configure --prefix=/usr/local/apr [root@VM apr-1.6.3]# make && make install
 
  • 编译安装apr-util(apr-util-1.6.1)

     

下载地址:  http://download.nextag.com/apache//apr/apr-util-1.6.1.tar.gz 

[root@VM ~]# tar xf apr-util-1.6.1.tar.gz 
[root@VM ~]# cd apr-util-1.6.1 [root@VM apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/ [root@VM apr-util-1.6.1]# make && make install
 
  • 编译安装httpd(httpd-2.4.34)

下载地址:http://mirror.reverse.net/pub/apache//httpd/httpd-2.4.34.tar.gz 

[root@VM  ~]#  yum install gcc gcc-c++ pcre pcre-devel  # 安装依赖环境
[root@VM ~]# cd httpd-2.4.34 # 编译安装httpd [root@VM httpd-2.4.34]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --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-modeles=most --enable-mpms-shared=all --with-mpm=event [root@VM httpd-2.4.34]# make && make install [root@VM bin]# vi /etc/profile.d/http.sh # 配置环境变量 export PATH=/usr/local/apache/bin:$PATH [root@VM bin]# . /etc/profile.d/http.sh # 使能环境变量 [root@VM apache]# ln -sv /usr/local/apache/include/ /usr/include/httpd # 配置httpd include头文件 `/usr/include/httpd' -> `/usr/local/apache/include/' [root@VM apache]# vi /etc/man.config # 配置httpd man帮助文件 MANPATH /usr/local/apache/man
 
参数注释:
# ./configure --help :查看相关命令帮助,查看相关支持的选项参数及功能
    --prefix=PREFIX :指定默认安装目录
    --sbindir=DIR:指定可执行文件安装目录
    --enable-so   :   启用DSO动态加载模块支持,需要什么功能模块可动态加载
    --enable--ssl  :SSL/TLS support (mod_ssl) --enable-cgi :支持CGI脚本功能 --enable-rewrite : 启用网页地址重写功能,实现伪静态 --with-zlib=DIR:安装zlib库 --with-pcre=DIR :使用扩展的pcre lib库 --with-apr=DIR :指向apr安装路径 --with-apr-util=DIR :指向apr-util 安装路径 --enable-modules=most :指定安装DSO动态库用来通信 --with-mpm=prefork|worker|event :指定服务器默认支持的一种MPM模块 --enable-mpms-shared=all :当前平台选择MPM加载动态模块并以DSO动态库方式进行创建 configure的各项参数及功能介绍,可参照官方文档 https://httpd.apache.org/docs/2.4/en/programs/configure.html
 

 

 

  • 启动Apache服务并验证,修改apache的配置文件并设置PidFile路径(默认在/usr/local/apache/logs/httpd.pid)

[root@VM ~]# vi /etc/httpd/httpd.conf 
Pidfile "/var/run/httpd/httpd.pid"    # 添加该项,为Pidfile指明httpd.pid路径 [root@VM ~]# apachectl start # 启动apache服务 [root@VM ~]# ss -tunl | grep 80 tcp LISTEN 0 128 :::80 :::* [root@VM ~]# curl # 验证apache服务 <html><body><h1>It works!</h1></body></html>
 

   

三、编译安装Mysql

  • 建议在硬raid中创建lvm,使用独立的lvm磁盘作为mysql 数据存储目录 ,便于备份mysql数据

[root@VM ~]# fdisk  /dev/sda    # 磁盘创建分区/dev/sda4 ,并调整磁盘格式为8e(LVM)

Command (m for help): n # 创建分区 Command action e extended p primary partition (1-4) Command (m for help): p # 指定主分区 Selected partition 4 First cylinder (10976-16709, default 10976): Using default value 10976 Last cylinder, +cylinders or +size{K,M,G} (10976-16709, default 16709): Using default value 16709 Command (m for help): t # 调整分区类型 Partition number (1-4): 4 Hex code (type L to list codes): 8e Changed system type of partition 4 to 8e (Linux LVM) Command (m for help): p # 显示磁盘分区,验证/dev/sda4为Linux LVM分区类型 Device Boot Start End Blocks Id System /dev/sda1 * 1 256 2048000 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 256 10454 81920000 8e Linux LVM /dev/sda3 10454 10976 4194304 82 Linux swap / Solaris /dev/sda4 10976 16709 46051714+ 8e Linux LVM Command (m for help): w # 保存分区退出 The partition table has been altered! [root@VM ~]# partx -a /dev/sda # 内核重读磁盘分区 [root@VM ~]# kpartx -af /dev/sda [root@VM ~]# cat /proc/partitions # 验证内核是否加载 /dev/sda4分区 major minor #blocks name 8 0 134217728 sda 8 1 2048000 sda1 8 2 81920000 sda2 8 3 4194304 sda3 8 4 46051714 sda4 [root@VM ~]# mke2fs -t ext4 /dev/sda4 # 格式化分区/dev/sda4 [root@VM ~]# pvcreate /dev/sda4 # 创建pv Physical volume "/dev/sda4" successfully created [root@VM ~]# pvs # 显示pv PV VG Fmt Attr PSize PFree /dev/sda2 vg0 lvm2 a--u 78.12g 2.92g /dev/sda4 lvm2 ---- 43.92g 43.92g [root@VM ~]# vgextend vg0 /dev/sda4 # 扩展vg0 Volume group "vg0" successfully extended [root@VM ~]# vgs # 显示vg VG #PV #LV #SN Attr VSize VFree vg0 2 4 0 wz--n- 122.03g 46.84g [root@VM ~]# lvcreate -n data -L 20G vg0 # 创建lvm分区data Logical volume "data" created. [root@VM ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert data vg0 -wi-a----- 20.00g [root@VM ~]# mke2fs -t ext4 /dev/mapper/vg0-data # 对分区创建文件系统 [root@VM ~]# vi /etc/fstab # 配置开机自动挂载/dev/mapper/vg0-data 分区 /dev/mapper/vg0-data /data ext4 defaults 0 0 [root@VM ~]# mount -a # 挂载所有分区 [root@VM ~]# mount # 验证分区挂载 /dev/mapper/vg0-data on /data type ext4 (rw)
 
  • 编译安装mysql

下载地址:https://mirrors.163.com/mysql/Downloads/MySQL-5.5/mysql-5.5.61.tar.gz  

[root@VM ~]# tar xf mysql-5.5.61.tar.gz     # 解压mysql源码包

[root@VM ~]# useradd -s /sbin/nologin -r mysql # 添加系统用户mysql [root@VM ~]# id mysql uid=498(mysql) gid=498(mysql) groups=498(mysql) [root@VM ~]# cd /data/ # 创建mysql数据的目录/data/sqldata ,调整目录权限 [root@VM data]# mkdir sqldata [root@VM data]# chown root:mysql sqldata/ [root@VM ~]# yum install ncurses-devel bison bison-devel # 配置Epel yum源,安装mysql依赖环境 [root@VM ~]# cd mysql-5.5.61 # 编译安装mysql [root@VM mysql-5.5.61]# cmake . \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/data/sqldata \ -DSYSCONFDIR=/etc \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_MEMORY_STORAGE_ENGINE=1 \ -DMYSQL_UNIX_ADDR=/var/run/mysql/mysql.sock \ -DMYSQL_TCP_PORT=3306 \ -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DEXTRA_CHARSETS=all \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_DEBUG=0 [root@VM mysql-5.5.61]# make && make install [root@VM mysql]# vi /etc/profile.d/mysql.sh # 配置mysql环境变量 export PATH=/usr/local/mysql/bin:$PATH [root@VM mysql]# . /etc/profile.d/mysql.sh # 使能环境变量 [root@VM mysql]# ln -sv /usr/local/mysql/include/ /usr/include/mysql # 配置mysql include头文件 `/usr/include/mysql' -> `/usr/local/mysql/include/' [root@VM mysql]# vi /etc/man.config # 配置mysql命令帮助文件 MANPATH /usr/local/mysql/man [root@VM mysql]# vi /etc/ld.so.conf.d/mysql.conf # 配置mysql lib库,添加如下项 /usr/local/mysql/lib [root@VM lib]# ldconfig -v | grep mysql # 验证lib库 /usr/local/mysql/lib: libmysqlclient.so.18 -> libmysqlclient_r.so.18.0.0 /usr/lib64/mysql: libmysqlclient_r.so.16 -> libmysqlclient_r.so.16.0.0 libmysqlclient.so.16 -> libmysqlclient.so.16.0.0
 
#参数注释
# cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql    #  MySQL安装的根目录
-DMYSQL_DATADIR=/data/sqldata # MySQL数据库文件存放目录 -DSYSCONFDIR=/etc # MySQL配置文件所在目录 -DWITH_MYISAM_STORAGE_ENGINE=1 # MySQL的数据库引擎 -DWITH_INNOBASE_STORAGE_ENGINE=1 # MySQL的数据库引擎 -DWITH_ARCHIVE_STORAGE_ENGINE=1 # MySQL的数据库引擎 -DWITH_MEMORY_STORAGE_ENGINE=1 # MySQL的数据库引擎 -DMYSQL_UNIX_ADDR=/var/run/mysql/mysql.sock # MySQL的sock目录 -DMYSQL_TCP_PORT=3306 # MySQL的监听端口 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all # 使MySQL支持所有的扩展字符 -DDEFAULT_CHARSET=utf8 # 设置MySQL的默认字符集为utf8 -DDEFAULT_COLLATION=utf8_general_ci #设置MySQL的默认字符校对 -DWITH_DEBUG=0 # 禁用调试模式 编译的参数可以参考 。
 
  • mysql初始化,启动服务

 

[root@VM mysql]# chown -R root:mysql /usr/local/mysql    # 设置/usr/local/mysql 目录权限

[root@VM mysql]# ./scripts/mysql_install_db --datadir=/data/sqldata/ --user=mysql # 初始化mysql脚本 Installing MySQL system tables... 180819 14:21:16 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap. 180819 14:21:16 [Note] ./bin/mysqld (mysqld 5.5.61) starting as process 65052 ... OK Filling help tables... 180819 14:21:17 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap. 180819 14:21:17 [Note] ./bin/mysqld (mysqld 5.5.61) starting as process 65059 ... OK To start mysqld at boot time you have to copy support-files/mysql.server to the right place for your system [root@VM mysql]# ln -sv /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld # 启动文件 `/etc/init.d/mysqld' -> `/usr/local/mysql/support-files/mysql.server' [root@VM run]# vi /etc/my.cnf # 调整mysql 启动配置文件 [mysqld] datadir=/data/sqldata # 指定data目录 socket=/var/run/mysql/mysql.sock # 指定sock目录 user=mysql # 指定启动用户mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid # 指定pid目录 [root@VM run]# mkdir /var/run/mysql # 创建/var/run/mysql 目录,提供pid和sock存放目录 [root@VM run]# chown -R mysql.mysql /var/run/mysql # 调整目录属性 [root@VM run]# chkconfig --add mysqld # 加入mysqld启动服务 [root@VM run]# chkconfig mysqld on [root@VM run]# service mysqld start # 启动mysqld服务 Starting MySQL SUCCESS! [root@VM run]# ss -tunl | grep 3306 tcp LISTEN 0 50 *:3306 *:*
 
  • 对mysql数据库进行管理,删除匿名用户,创建密码 ,删除test数据库 等操作

     

 

[root@VM mysql]# mysql    #登录mysql 数据库
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1 Server version: 5.5.61 Source distribution mysql> select version(); +-----------+ | version() | +-----------+ | 5.5.61 | +-----------+ 1 row in set (0.00 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 4 rows in set (0.00 sec) mysql> drop database test; Query OK, 0 rows affected (0.03 sec) mysql> show tables; +---------------------------+ | Tables_in_mysql | +---------------------------+ | columns_priv | | db | | event | | func | | user | +---------------------------+ mysql> select user,host,password from user; +------+-----------+----------+ | user | host | password | +------+-----------+----------+ | root | localhost | | | root | vm | | | root | 127.0.0.1 | | | root | ::1 | | | | localhost | | | | vm | | +------+-----------+----------+ 6 rows in set (0.00 sec) mysql> drop user root@'::1'; # 清理匿名用户 Query OK, 0 rows affected (0.00 sec) mysql> drop user ''@'localhost'; Query OK, 0 rows affected (0.00 sec) mysql> drop user ''@'vm'; Query OK, 0 rows affected (0.00 sec) mysql> UPDATE user SET password=PASSWORD('Hello123abc.com') WHERE user='root'; # 定义root用户密码 Query OK, 4 rows affected (0.01 sec) Rows matched: 4 Changed: 4 Warnings: 0 mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
 
  • 对mysql 创建用户及密码、主机配置文件,可以不使用密码进行登录

     

[root@VM mysql]# vi /root/.my.cnf    # 添加如下代码,实现无需密码进行登录
[mysql] user = root host = localhost password = Hello123abc.com 注:在启动MySQL服务时,会按照一定次序搜索my.cnf。 寻找顺序:/etc/my.cnf -->$MYSQL_Base/my.cnf --> --defaults-extra-file=/path/to/some_my.cnf -->.my.cnf
 

 

四、编译安装PHP

  • 编译安装php-5.6.36

     

下载地址:http://at2.php.net/distributions/php-5.6.36.tar.gz 

[root@VM ~]# yum -y install libxml2-devel openssl-devel openssl bzip2-devel libmcrypt libmcrypt-devel mcrypt   
# 配置Epel yum源,安装依赖环境
[root@VM ~]# cd php-5.6.36 [root@VM php-5.6.36]# ./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-bz2 \ --with-mcrypt --with-libxml-dir=/usr \ --enable-sockets --with-apxs2=/usr/local/apache/bin/apxs \ --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d \ --enable-maintainer-zts [root@VM php-5.6.36]# make && make install [root@VM php-5.6.36]# cp php.ini-production /etc/php.ini # 把php提供配置文件 [root@VM ~]# vi /etc/profile.d/php.sh #添加环境变量 export PATH=/usr/local/php/bin:$PATH [root@VM ~]# ln -sv /usr/local/php/include/ /usr/include/php # 添加php 头文件 `/usr/include/php' -> `/usr/local/php/include/'
 
参数注释;
--prefix=/usr/local/php  # 指定php安装的路径
--with-mysql=/usr/local/mysql # 指定mysql的安装目录
--with-mysqli=/usr/local/mysql/bin/mysql_config # 可以让mysql与php结合的接口 --with-openssl #支持ssl功能 --enable-mbstring # 指定可以支持中文语言 --with-freetype-dir # 加载freetype的头文件,可以支持不同字体 --with-jpeg-dir --with-png-dir # 支持jpep格式图片 ,支持pnp格式图片 --with-zlib # 支持压缩库 --with-libxml-dir=/usr # 指定xml的库路径 --enable-sockets # 支持套接字的通信功能 --with-mcrypt # 支持额外的加密功能的库 --with-config-file-path=/etc # 指定php配置文件的路径(/etc/php.ini) --with-config-file-scan-dir=/etc/php.d # 支持php文件的附件配置文件(/etc/php.d/*.ini) --with-bz2 #支持bz2的压缩库 --enable-maintainer-zts # 此选项是否安装取决于你的Apache工作的mpm模式,
 
  • 配置apache 以支持php

[root@VM ~]# vi /etc/httpd/httpd.conf    #配置httpd 集成php 
    <1> 确认php模块启动 LoadModule php5_module modules/libphp5.so <2>添加如下二行 AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps <3> 定位至DirectoryIndex index.html 修改为: DirectoryIndex index.php index.html [root@VM ~]# apachectl stop # 重启httpd服务 [root@VM ~]# apachectl start
 
  • 验证php功能与apache ,php与mysql 连接

[root@VM ~]# vi /usr/local/apache/htdocs/index.php    # 测试apache 与 php 连接状态脚本
<?php
        phpinfo(); ?> [root@VM ~]# vi /usr/local/apache/htdocs/mysql.php # 测试php 与 mysql 连接状态脚本 <?php $link = mysql_connect('localhost','root','Hello123abc.com'); if ($link) echo "sucessful."; else echo "failure."; mysql_close(); ?>
 

    image.png

    image.png

 

五、安装php加速器xcache

 

  • 安装xcache

下载地址:http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz 

[root@VM ~]# tar xf xcache-3.2.0.tar.gz     
[root@VM ~]# cd xcache-3.2.0 [root@VM xcache-3.2.0]# phpize # 报错,通过yum install autoconfig 解决。 Configuring for: PHP Api Version: 20131106 Zend Module Api No: 20131226 Zend Extension Api No: 220131226 Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable. Then, rerun this script. [root@VM xcache-3.2.0]# phpize # 编译php模块 Configuring for: PHP Api Version: 20131106 Zend Module Api No: 20131226 Zend Extension Api No: 220131226 [root@VM xcache-3.2.0]# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config # 编译安装 [root@VM xcache-3.2.0]# make && make install # 安装,记录生成的文件路径 Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20131226/ [root@VM ~]# cp xcache.ini /etc/php.d/ [root@VM ~]# vi /etc/php.d/xcache.ini extension = /usr/local/php/lib/php/extensions/no-debug-zts-20131226/xcache.so #修改该配置,变为绝对路径 [root@VM ~]# apachectl stop # 重启httpd服务 [root@VM ~]# apachectl start
 
  • 验证xcache 安装

image.png

 

六、安装phpMyAdmin-4.8.2 ,管理mysql

  • 安装phpMyAdmin-4.8.2   ,支持php5.5- php 7.2  ,mysql-5.5 以上

下载地址:https://files.phpmyadmin.net/phpMyAdmin/4.8.2/phpMyAdmin-4.8.2-all-languages.tar.xz 

[root@VM ~]# tar xf phpMyAdmin-4.8.2-all-languages.tar.xz

[root@VM ~]# mv phpMyAdmin-4.8.2-all-languages /usr/local/apache/htdocs/pmyadmin
 

    image.png

  • 错误故障解决

    image.png

1)配置文件现在需要一个短密码:
解决办法:设定 config.default.php 文件的108行 $cfg[‘blowfish_secret’] 参数,参数字符串长度必须在32位以上。
[root@VM pmyadmin]# vi libraries/config.default.php # 在phpMyAdmin目录下libraries文件下的config.default.php $cfg['blowfish_secret'] = 'Itwish@itwish.cn@blog.51cto.com/itwish'; 2)$cfg['TempDir'] (./tmp/) 读取失败且不能建立缓存, phpMyAdmin运行速度将受影响. 解决办法:手动在phpmyadmin的根目录建立tmp文件,并赋予777权限 [root@VM pmyadmin]# mkdir -m 777 tmp
 

 

七、压力测试

  • ab工具测试

[root@VM pmyadmin]# ulimit -n 3000
[root@VM pmyadmin]# ab -c 200 -n 2000 http://192.168.4.160/pmyadmin/index.php This is ApacheBench, Version 2.3 <$Revision: 1826891 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 192.168.4.160 (be patient) Server Software: Apache/2.4.34 Server Hostname: 192.168.4.160 Server Port: 80 Document Path: /pmyadmin/index.php Document Length: 14114 bytes Concurrency Level: 200 Time taken for tests: 50.732 seconds Complete requests: 68 Failed requests: 50 (Connect: 0, Receive: 0, Length: 50, Exceptions: 0) Total transferred: 1237144 bytes HTML transferred: 1115484 bytes Requests per second: 1.34 [#/sec] (mean) Time per request: 149211.594 [ms] (mean) Time per request: 746.058 [ms] (mean, across all concurrent requests) Transfer rate: 23.81 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 42 10.0 45 48 Processing: 303 3041 2912.9 2091 15081 Waiting: 92 2496 2183.3 1949 13240 Total: 303 3083 2914.7 2120 15127 Percentage of the requests served within a certain time (ms) 50% 2120 66% 2458 75% 3025 80% 3069 90% 5107 95% 9875 98% 13559 99% 15127 100% 15127 (longest request) 结果证实 ,安装xcache 压力测试 ,时间间隔明显减少
 

 

LAMP编译安装,实现php-fpm模式 


一、配置编译环境 ,安装“Server PlatForm Development”, “Development tools”,关闭selinux 和 iptables    ,与上文配置相同

二、编译安装Apache ,与上文配置相同

三、编译安装Mysql,与上文配置相同

四、编译安装PHP 支持Fast-CGI 

  • 编译安装php-5.6.36

     

下载地址:http://at2.php.net/distributions/php-5.6.36.tar.gz 

[root@VM ~]# yum -y install libxml2-devel openssl-devel openssl bzip2-devel libmcrypt libmcrypt-devel mcrypt   
# 配置Epel yum源,安装依赖环境
[root@VM ~]# cd php-5.6.36 [root@VM php-5.6.36]# ./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-bz2 \ --with-mcrypt --with-libxml-dir=/usr \ --enable-sockets --enable-fpm \ --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d [root@VM php-5.6.36]# make && make install [root@VM ~]# vi /etc/profile.d/php.sh #添加环境变量 export PATH=/usr/local/php/bin:$PATH [root@VM ~]# ln -sv /usr/local/php/include/ /usr/include/php # 添加php 头文件 `/usr/include/php' -> `/usr/local/php/include/'
 
# 说明,与Module方式相比,编译安装Fast-CGI模式时
去掉了--enable-maintainer-zts,不再将php作为httpd的模块。
此外将--with-apxs2=/usr/local/apache/bin/apxs改为--enable-fpm
 
  • 配置并启动 php-fpm 服务

     

[root@VM ~]# cd php-5.6.36
[root@VM php-5.6.36]# cp php.ini-production /etc/php.ini # 为php提供配置文件 [root@VM php-5.6.36]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm # 配置php-fpm启动脚本 [root@VM php-5.6.36]# chmod +x /etc/init.d/php-fpm # 分配脚本执行权限 [root@VM php-5.6.36]# chkconfig --add php-fpm [root@VM php-5.6.36]# chkconfig php-fpm on [root@VM php-5.6.36]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf #准备脚本的配置文件 [root@VM php-5.6.36]# vi /usr/local/php/etc/php-fpm.conf # 配置php-fpm 相关参数 pid = /var/run/php-fpm.pid # 默认路径为/usr/local/php/var/run/php-fpm.pid ,指定pid文件 pm.max_children = 5 # 服务启动时的子进程数 pm.start_servers = 2 # 开启启动的进程数 pm.min_spare_servers = 1 # 最少空闲子进程数 pm.max_spare_servers = 3 # 最大空闲子进程数 pm.max_requests = 500 # 最大客户端请求数 [root@VM php-5.6.36]# service php-fpm start [root@VM ~]# ss -tunl | grep 9000 tcp LISTEN 0 128 127.0.0.1:9000 *:*
 
  • 配置apache 以支持fast-CGI 

[root@VM ~]# vi /etc/httpd/httpd.conf    #配置httpd 集成php 
    <1> 确认php模块启动 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so <2> 配置apache可识别php文件 AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps <3> 定位至DirectoryIndex index.html 修改为: DirectoryIndex index.php index.html <4> 配置httpd支持fast-CGI,在主机下定义,而非目录 DocumentRoot "/var/www/html" ProxyRequests off ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1 <5> 配置fast-CGI支持虚拟主机,在主机下定义,而非目录 <VirtualHost *:80> ProxyRequests off ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1 </VirtualHost> [root@VM ~]# apachectl stop # 重启httpd服务 [root@VM ~]# apachectl start
 
  • 验证php功能与apache ,php与mysql 连接

[root@VM ~]# vi /usr/local/apache/htdocs/index.php    # 测试apache 与 php 连接状态脚本
<?php
        $link = mysql_connect('localhost','root','Hello123abc.com'); if ($link) echo "sucessful."; else echo "failure."; mysql_close(); phpinfo(); ?>
 

    image.png

五、安装php加速器xcache,与上文配置相同

六、安装phpMyAdmin-4.8.2 ,管理mysql ,与上文配置相同

七、压力测试 ,与上文配置相同

至此,完成LAMP编译安装实验,分别实现 php 以module 模式访问 和 配置apache 与fpm方式 的php 。

转载请注明出处https://blog.51cto.com/itwish/2161699