本章概要

  • LAMP介绍
  • PHP配置
  • LAMP部署和相关应用配置
  • 使用Xcache实现加速访问
  • PHP-FPM模式
  • 源码编译LAMP
  • 编译安装FPM模式的LAMP

1、LAMP介绍

  • LAM(M)P:
      L: linux
      A: apache (httpd)
      M: mysql, mariadb
      M:memcached
      P: php, perl, python
  • WEB资源类型:
      静态资源:原始形式与响应内容一致,在客户端浏览器执行
      动态资源:原始形式通常为程序文件,需要在服务器端执行之后,将执行结果返回给客户端
  • Web相关语言
      客户端技术:html,javascript,css,jpg
      服务器端技术:php,jsp,python,asp

CGI

  • CGI:Common Gateway Interface
    可以让一个客户端,从网页浏览器通过http服务器向执行在网络服务器上的程序传输数据;CGI描述了客户端和服务器程序之间传输的一种标准

  • 请求流程:
    Client --(httpd) --> httpd–(cgi) --> application server (program file) --(mysql) --> mysql

  • php: 脚本编程语言、嵌入到html中的嵌入式web程序语言
    基于zend编译成opcode(二进制格式的字节码,重复运行,可省略编译环境)

  • 知识扩展:

CGI      一种协议,能够处理web服务器发送的动态资源的请求,返回结果给web服务器
FASTCGI  基于CGI的优化的协议,处理速度更快
CGI可以通过多种语言进行编写,而php语言能够更好、更简洁的编写CGIPHP-CGI 通过PHP语言编写的对CGI协议的实现,单次只能处理一个请求,功能较差
PHP-FPM 基于PHP-CGI的优化,实现了动静资源分别处理功能,减轻了服务器的压力
CGI进程 处理web服务器发送的动态资源请求,调用和初始化zend虚拟机
CGI脚本 被执行的PHP源码文件
zend虚拟机 把动态资源请求的php文件进行语法分析,编译为opcode并执行PHP-FPM是CGI进程的管理,当动态资源请求来临时,PHP-FPM调用CGI进程处理该请求,CGI进程调用zend虚拟机,处理承载动态请求的php文件,处理完成后调用存储设备上的资源回应给php-fpmcgi模块与http协议结合
WEB服务器的一次动态资源请求处理过程
1、客户端通过浏览器发送请求,浏览器通过http协议向web服务器发送请求报文;
报文通过TCP/IP协议传送过程:
在进行通信之前,先通过三次握手与web服务器实现连接;
请求报文在应用层通过端口实现不同应用程序间的通信,在传输层通过tcp或udp协议实现报文的传输,在网络层通过IP协议实现报文的路由转发,在网络接口层实现网络设备的选择,在每一层都加上数据报文头部进行封装,在到达目标后进程解封装从而实现数据报文的传送
2、web服务器通过http协议接收到该请求报文,发现是动态资源请求,无法处理该请求,把动态资源的请求转发给CGI协议处理;
3、php-cgi是通过php语言编写对cgi协议的实现(无论任何一种语言,只要遵循CGI协议规范进行编写,都可以被CGI进行调用,也即是说只要遵循该协议规范,可以由任何一种语言实现),
由于php-cgi工作模式的不同,其实现方式也不同
(1)通过最基本的cgi模式方式实现,当动态资源请求到达时,临时启用一个cgi进程,转发要处理的请求,处理完毕,进程自动销毁;在启用第二个进程处理第二个请求,这样的处理效率及其低下
以下两种属于对cgi的升级处理方式
(2)把php-cgi当做httpd协议的一个模块实现,在编译时把该模块加入http协议中,启用http协议时,该模块自动启用,开启cgi进程,等待动态资源请求,当动态资源请求来临时,直接通过php-cgi模块处理该请求,无需临时启动cgi进程。
但由于http协议加载了此模块,一旦启用该模块,无论是否使用该模块(当请求的时静态资源时,无需动态资源解析就是用不到该模块),都会存在于每个进程中,这样就大大浪费了内存空间
(3)通过php-fpm,把fastcgi协议与http协议分离,即http协议处理静态资源请求,所有的动态资源请求全部转发到php-fpm服务器,这样就实现了动静资源请求分别处理的功能,能够减轻服务器的压力,提升服务的处理效率,该模式适合于高负载场景。同样的,这也是模块化的一种实现
4、这里以php-fpm为例:当php-fpm接收到动态资源请求时,启用cgi进程,cgi进程调用并初始化zend虚拟机,zend虚拟机对cgi脚本进行词法解析,语法分析,并编译为opcode执行,调用存储设备上的资源

LAMP工作原理

2、PHP配置

PHP简介

  • 官网:http://www.php.net/
  • PHP是通用服务器端脚本编程语言,主要用于web开发实现动态web页面,也是最早实现将脚本嵌入HTML源码文档中的服务器端脚本语言之一。同时,php还提供了一个命令行接口,因此,其也可以在大多数系统上作为一个独立的shell来使用

PHP配置

  • php:脚本语言解释器
    配置文件:/etc/php.ini, /etc/php.d/*.ini
    配置文件在php解释器启动时被读取
    对配置文件的修改生效方法
      Modules:重启httpd服务
      FastCGI:重启php-fpm服务
    /etc/php.ini配置文件格式:
      [foo]:Section Header
      directive = value
      注释符:较新的版本中,已经完全使用;进行注释
      #:纯粹的注释信息
      ;:用于注释可启用的directive
  • php设置
    max_execution_time = 30 最长执行时间30s
    memory_limit 128M 生产不够,可调大
    display_errors off 调试使用,不要打开,否则可能暴露重要信息
    display_startup_errors off 建议关闭
    post_max_size 8M 最大上传数据大小,生产可能临时要调大,比下面项要大
    upload_max_filesize 2M 最大上传文件,生产可能要调大
    max_file_uploads = 20 同时上传最多文件数
    date.timezone=Asia/Shanghai 指定时区
    short_open_tag=on 开启短标签,如<? phpinfo();?>
  • php.ini的核心配置选项文档:http://php.net/manual/zh/ini.core.php
  • php.ini配置选项列表:
    http://php.net/manual/zh/ini.list.php
  • php语言格式
<?php
...phpcode...
?>

PHP的加速器

  • php的加速器:基于PHP的特殊扩展机制如opcode缓存扩展也可以将opcode缓存于php的共享内存中,从而可以让同一段代码的后续重复执行时跳过编译阶段以提高性能。这些加速器并非真正提高了opcode的运行速度,而仅是通过分析opcode后并将它们重新排列以达到快速执行的目的

  • 常见的php加速器有:
    1、APC (Alternative PHP Cache)
      遵循PHP License的开源框架,PHP opcode缓存加速器,目前的版本不适用于PHP 5.4
      项目地址:http://pecl.php.net/package/APC
    2、eAccelerator
      源于Turck MMCache,早期的版本包含了一个PHP encoder和PHP loader,目前encoder已经不在支持。
      项目地址http://eaccelerator.net/
    3、XCache
      快速而且稳定的PHP opcode缓存,经过严格测试且被大量用于生产环境。
      项目地址:http://xcache.lighttpd.net/,收录EPEL源
    4、Zend Optimizer和Zend Guard Loader
      Zend Optimizer并非一个opcode加速器,它是由Zend Technologies为PHP5.2及以前的版本提供的一个免费、闭源的PHP扩展,其能够运行由Zend Guard生成的加密的PHP代码或模糊代码。而Zend Guard Loader则是专为PHP5.3提供的类似于Zend Optimizer功能的扩展。
      项目地址:http://www.zend.com/en/products/guard/runtime-decoders
    5、NuSphere PhpExpress
      NuSphere的一款开源PHP加速器,它支持装载通过NuSphere PHP Encoder编码的PHP程序文件,并能够实现对常规PHP文件的执行加速。
      项目地址:http://www.nusphere.com/products/phpexpress.html

  • 知识扩展:

cgi模块与Xcache结合
php的加速器基于PHP的特殊扩展机制如opcode缓存扩展也可以将opcode缓存于php的共享内存中,从而可以让同一段代码的后续重复执行时跳过编译阶段以提高性能。这些加速器并非真正提高了opcode的运行速度,而仅是通过分析opcode后并将它们重新排列以达到快速执行的目的
php-cgi模块化+xcache可以将opcode缓存于php的共享内存中,从而可以让同一段代码的后续重复执行时跳过编译阶段以提高性能
php-fpm+xcache由于动静资源请求独立运行,因此该模式处理动态资源请求速度比模块化方式速度更快,性能更好cgi模块与数据库结合cgi协议无论哪种工作模式,在运行时总是要读取或存储数据,而数据库与cgi结合的方式使得数据存储能够独立于程序存储,如果程序出现问题则不会波及到数据,这样不仅能够提升数据读取和存储速度还保证了数据的安全性CGI协议相当于一个中间层,它承载了http协议(http通过cgi协议处理动态资源请求),mysql数据库(实现了cgi协议数据的读取和存储),以及php(实现对cgi的编写以及cgi的三种工作模式),这样就实现了LAMP,是基于三层架构实现的(web服务器,cgi协议服务器,mysql存储服务器)

3、LAMP部署和相关应用配置

  • LAMP
      httpd:接收用户的web请求;静态资源则直接响应;动态资源为php脚本,对此类资源的请求将交由php来运行
      php:运行php程序
      MariaDB:数据管理系统
  • http与php结合的方式
      CGI
      FastCGI
      modules (将php编译成为httpd的模块,默认方式)
        MPM:
          prefork: libphp5.so
          event, worker: libphp5-zts.so

快速部署LAMP

  • CentOS 7:
      Modules:httpd, php, php-mysql, mariadb-server
      FastCGI:httpd, php-fpm, php-mysql, mariadb-server
  • CentOS 6:
      Modules:httpd, php, php-mysql, mysql-server
      FastCGI:默认不支持

安装LAMP

  • 安装LAMP
      CentOS 6:
        yum install httpd, php, mysql-server, php-mysql
        service httpd start
        service mysqld start
      CentOS 7:
        yum install httpd, php, php-mysql, mariadb-server
        systemctl start httpd.service
        systemctl start mariadb.service
      注意:要使用prefork模型
  • php代码:
格式1
<?phpecho "<h1>Hello world!</h1>"
?>
格式2
<h1>
<?phpecho "Hello world!" ?>
</h1>php测试代码
<?phpecho date("Y/m/d H:i:s");phpinfo();
?>
  • 使用mysql扩展连接数据库的测试代码
<?php
$conn = mysql_connect(‘mysqlserver','username','password');
if ($conn)echo "OK";
elseecho "Failure";#echo mysql_error();
mysql_close();
?>
  • Php使用mysqli扩展连接数据库的测试代码
<?php
$mysqli=new mysqli("mysqlserver",“username",“password");
if(mysqli_connect_errno()){echo "Failure";$mysqli=null;exit;
}
echo “OK";
$mysqli->close();
?>
  • 使用PDO(PHP Data Object)扩展连接数据库的测试代码1
<?php
$dsn='mysql:host=mysqlhost;dbname=test';
$username='root';
$passwd='magedu';
$dbh=new PDO($dsn,$username,$passwd);
var_dump($dbh);
?>
  • 使用PDO扩展连接数据库的测试代码2
<?php
try {
$user='root';
$pass='magedu';
$dbh= new PDO('mysql:host=mysqlhost;dbname=mysql', $user, $pass);
foreach($dbh->query('SELECT user,hostfrom user') as $row) {
print_r($row);
}
$dbh= null;
} catch (PDOException$e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
?>

常见LAMP应用

  • PhpMyAdmin是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库
  • WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可把WordPress当作一个内容管理系统(CMS)来使用
  • PHPWind:2003年发布了PHPWind的前身版本ofstar,并发展成为包含BBS、CMS、博客、SNS等一系列程序的通用型建站软件, 于2008年加入阿里巴巴集团
  • Crossday Discuz! Board(简称Discuz!)是一套通用的社区论坛软件系统。自2001年6月面世以来,是全球成熟度最高、覆盖率最大的论坛软件系统之一。2010年8月23日,与腾讯达成收购协议
  • ECShop是一款B2C独立网店系统,适合企业及个人快速构建个性化网上商店。系统是基于PHP语言及MYSQL数据库构架开发的跨平台开源程序。2006年6月,ECShop推出第一个版本1.0

部署phpMyadmin

  • 具体步骤如下:
方法1、数据库安装在本地(即和http协议在同一台设备上)
yum -y install httpd mariadb-server php php-mysql
systemctl start httpd
systemctl start mariadb
mysql_secure_installation
或者set password for 'root'@'localhost' = password('centos123456');  给本地数据库添加root密码
下载:https://www.phpmyadmin.net/downloads/
这里以下载到/root目录下为例
mkdir /var/www/html/pma
tar xvf phpMyAdmin-4.0.10.20-all-languages.tar.xz
cp /root/phpMyAdmin-4.0.10.20-all-languages/*  /var/www/html/pma/
cd /var/www/html/pma/
cp config.sample.inc.php  config.inc.php
yum -y install php-mbstring
systemctl reload httpd方法2、数据库安装在其他服务器(假设地址为:192.168.32.129),在以上步骤的基础上做以下修改
vim /var/www/html/pmaconfig.inc.php
$cfg['blowfish_secret'] = '123456';  更改密码
$cfg['Servers'][$i]['host'] = '192.168.32.129';  指向数据库服务器的ip地址
为数据库设置登录密码并进行授权
GRANT ALL ON *.* to 'mysql1'@'192.168.32.130' IDENTIFIED BY 'centos123456'
注意:我们这里为了试验进行了最大权限的授权,在实际中要根据需求对数据库用户进行授权

实现LAMP应用博客系统wordpress

  • 具体步骤如下:
实验环境:
mysql服务器:192.168.32.129
apache服务器:192.168.32.130
安装相关软件
yun -y install httpd php-mysql php mariadb-server
(1)下载地址:
官网:https://cn.wordpress.org/
(2)解压缩WordPress博客程序到网页站点目录下
cd /root
unzip wordpress-4.3.1-zh_CN.zip
cp wordpress  /var/www/html
(3)新建wpdb库和wpuser用户(数据库在本地和在其他主机均可)
mysql
mysql> create database wpdb;
mysql> grant all privileges on wpdb.* to wpuser@'%' identified by "wppass";
(4)网站文件配置
cd /var/www/html/wordpress
cp wp-config-sample.php wp-config.php
vim wp-config.php
// ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //
/** WordPress数据库的名称 */
define('DB_NAME', 'wpdb');/** MySQL数据库用户名 */
define('DB_USER', 'wpuser');/** MySQL数据库密码 */
define('DB_PASSWORD', 'centos123456');/** MySQL主机 */
define('DB_HOST', '192.168.32.129');(5)打开http://192.168.32.130/wordpress进行页面安装
注意wordpress目录权限
Setfacl –R –m u:apache:rwx wordpress
(6)对搭建好的网站进行压力测试,查看其并发能力
ab -c 10 -n 100 192.168.32.130/wordpress/

4、使用Xcache实现加速访问

CentOS7编译php-xcache加速访问

  • 具体安装步骤如下:
官网:http://xcache.lighttpd.net/wiki/ReleaseArchive
安装方法(1)rpm包:来自epel源(2)编译安装
以编译安装为例:yum -y install php-devel
下载并解压缩xcache-3.2.0.tar.bz2phpize  生成编译环境cd xcache-3.2.0./configure --enable-xcache--with-php-config=/usr/bin/php-configmake && make install
准备相关文件cp xcache.ini/etc/php.d/
重启http服务systemctl restart httpd.service

5、PHP-FPM模式

  • httpd+php结合的方式:
      module: php
      fastcgi: php-fpm
  • php-fpm:
    CentOS 6:
      PHP-5.3.2之前:默认不支持fpm机制;需要自行打补丁并编译安装
      httpd-2.2:默认不支持fcgi协议,需要自行编译此模块
      解决方案:编译安装httpd-2.4, php-5.3.3+
    CentOS 7:
      httpd-2.4:rpm包默认编译支持fcgi模块
      php-fpm包:专用于将php运行于fpm模式

配置fastcgi

  • php配置
    配置文件:/etc/php.ini,/etc/php.d/*.ini
      Module模式下,重启Httpd服务
      FastCGI模式下,重启php-fpm服务
    配置文件格式
      [foo]:Section Header
      Directive=value
      注释符:# 纯粹的注释信息
        ; 用于注释可启动的指令
      说明:在较新的版本中,已经完全使用”;”进行注释

  • php.ini核心配置的详细说明:http://php.net/manual/zh/ini.core.php

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

  • fcgi配置
    fcgi服务配置文件:/etc/php-fpm.conf, /etc/php-fpm.d/*.conf
    连接池:
      pm = static|dynamic
        static:固定数量的子进程;pm.max_children
        dynamic:子进程数量以动态模式管理
          pm.max_children
          pm.start_servers
          pm.min_spare_servers
          pm.max_spare_servers
          pm.max_requests= 500
    确保运行php-fpm进程的用户对session目录有读写权限
      mkdir /var/lib/php/session
      chown apache.apache /var/lib/php/session

  • 主要配置步骤如下:

(1) 配置httpd,添加/etc/httpd/conf.d/fcgi.conf配置文件,内容类似
DirectoryIndex index.php
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1
注意:在HTTPD服务器上必须启用proxy_fcgi_module模块,充当PHP客户端
httpd –M |grep fcgi
cat /etc/httpd/conf.modules.d/00-proxy.conf
(2) 虚拟主机配置
vim /etc/httpd/conf.d/vhosts.conf
DirectoryIndex index.php
<VirtualHost*:80>ServerNam ewww.b.netDocumentRoot /apps/vhosts/b.netProxyRequests OffProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/apps/vhosts/b.net/$1<Directory "/apps/vhosts/b.net">Options NoneAllowOverride NoneRequire all granted</Directory>
</VirtualHost>

CentOS7安装LAMP(PHP-FPM模式)

实验环境:
客户端:192.168.32.128
apache服务器:192.168.32.129
fastcgi服务器:192.168.32.130
数据库服务器:192.168.32.131
配置如下:
(1)首先四台主机关闭防火墙和selinux
(2)fastcgi服务器:
yun -y install php-fpm php-mysql
安装php-mysql,使fastcgi自动关联数据库
cat /etc/php.d/mysql.ini
[root@centos7 website]# cat /etc/php.d/mysql.ini
; Enable mysql extension module
extension=mysql.soPHP-FPM常见配置daemonize= no    是否将程序运行在后台listen = 127.0.0.1:9000   FPM监听地址listen.backlog= -1    等待队列的长度-1表示无限制listen.allowed_clients= 127.0.0.1 //仅允许哪些主机访问pm = dynamic PM是动态运行还是静态运行static 固定数量的子进程,pm.max_childendynamic子进程数据以动态模式管理pm.start_serverspm.min_spare_serverspm.max_spare_serverspm.max_requests= 500php_value[session.save_handler] = filesphp_value[session.save_path] = /var/lib/php/session   设置session存放位置mkdir /data/website
创建php测试程序与数据库进行关联(调用函数,如果能连接数据库返回ok,如果连接不上数据库,返回failure)
vim /data/website/index.php
<?php
$conn = mysql_connect('192.168.32.131','testuser','centos123456');
if ($conn)
echo "OK";
else
echo "Failure";
#echo mysql_error();
mysql_close();
?>监听本地9000端口,允许apache服务器充当客户端发送动态资源(.php文件)请求过来
vim /etc/php-fpm.d/www.conf
listen = 192.168.32.130:9000
listen.allowed_clients = 192.168.32.129(2)apache服务器:
安装http
yum -y install httpd
把apache与fastcgi关联起来
vim /etc/httpd/conf.d/fastcgi.conf
ProxyRequests Off      关闭正向代理
ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.32.130:9000/data/website/$1    开启反向代理,把所有.php文件的请求全部范发到fastcgi服务器192.168.32.130处理查看Httpdmod_fcgi模块是否加载httpd -M | grep fcgiproxy_fcgi_module(shared)(4)数据库服务器:
yum -y install mariadb-server
mysql_secure_installation  运行安全脚本(如果做实验此步骤可省略)
[root@centos7-3 ~]# mysql
MariaDB [(none)]> create database testdb;     创建测试数据库
MariaDB [(none)]> grant all on testdb.* to 'testuser'@'192.168.32.%' identified by 'centos123456';  给fastcgi服务器创建数据库用户并授权(5)客户端服务器
如果apache服务器配置基于FQDN的虚拟主机,则需要配置域名解析
在/etc/hosts文件写入ip地址和域名的对应关系或者在网络配置文件中指定DNS的地址

实验:搭建wordpress(PHP-FPM模式)

客户端服务器:192.168.32.128
apache服务器:192.168.32.129
fastcgi服务器:192.168.32.130
数据库服务器:192.168.32.131(1)apache服务器:192.168.32.129
创建基于FQDN模式的虚拟主机
vim /etc/httpd/conf.d/test.conf
DirectoryIndex index.php
<VirtualHost *:80>
ServerName www.wordpress.com
DocumentRoot /data/wordpress/
ProxyRequests Off   关闭正向代理
ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.32.131:9000/data/wordpress/$1  开启发现代理,把动态请求发送到fastcgi服务器进行处理
<Directory "/data/wordpress">
Require all granted
</Directory>
</VirtualHost>
下载软件包并解压
官网:https://cn.wordpress.org/
tar xf wordpress-4.9.4-zh_CN.tar.gz -C /data(2)fastcgi服务器:192.168.32.130
yum -y insatll php-fpm php-mysql
vim /etc/php-fpm.d/www.conf
listen = 9000     监听本地所有ip地址的9000端口
listen.allowed_clients = 192.168.32.129  允许apache服务器作为客户端并进行监听
下载软件包并解压
官网:https://cn.wordpress.org/
tar xf wordpress-4.9.4-zh_CN.tar.gz -C /data
cd /data/wordpress
cp wp-config-sample.php wp-config.php
vim wp-config.php
define('DB_NAME', 'job');/** MySQL数据库用户名 */
define('DB_USER', 'job');/** MySQL数据库密码 */
define('DB_PASSWORD', 'job');/** MySQL主机 */
define('DB_HOST', '192.168.32.131');(3)数据库服务器:
vim /etc/my.conf.d/server.conf
[mysqld]
skip_name_resolve   禁止ip地址反向解析
创建数据库和用户并授权
mysql
>create database job;
>grant all on job.* to 'job'@'192.168.32.129' identified by 'job';  (4)在客户端登录测试
客户端配置域名解析
vim /etc/hosts
192.168.32.129  www.wordpress.com
注意:这种配置方法临时有效,永久有效需要在网络配置文件指定DNS注意:在测试时,由于虚拟主机使用的是基于FQDN方式创建,因此必须使用域名进行测试,不能使用ip地址测试(ip地址无法通过http协议传输数据报文)
浏览器登录http://www.wordpress.com排错:当出现数据库连接失败情况时
删除wp-config.php文件,先登录apache服务器地址,提示登录错误,这是因为缺少wp-config.php文件指向数据库;此时再次建立wp-config.php文件,更改改配置文件再次登录

6、CentOS7源码编译LAMP

在centos7上编译安装LAMP:mairadb:通用二进制格式,mariadb-5.5.56httpd:编译安装,httpd-2.4.25php5:编译安装,php-5.6.30phpMyAdmin:安装phpMyAdmin-4.4.15.10-all-languagesXcache:编译安装xcache-3.2.0php5.4依赖于mariadb-devel包顺序:mariadb-->httpd-->php1、二进制安装mariadb
下载并解压mariadb源码包下载地址:https://downloads.mariadb.org/tar xvfmariadb-5.5-46-linux-x86_64.tar.gz -C /usr/local
准备相关配置文件cd /usr/localls -sv mariadb-5.5.46-linux-x86_64 mysql   #创建软链接,便于版本更新cd mysqlchown -R root.mysql ./*    #更改文件权限mkdir /mydata/data -p      #创建数据存放目录chown -R mysql.mysql /mydata/data   #更改权限mkdir /etc/mysql          #创建配置文件目录
复制模板文件为主配置文件cp support-files/my-large.cnf /etc/mysql/my.cnfvim /etc/mysql/my.cnf[mysqld]加三行datadir=/mydata/datainnodb_file_per_table= ONskip_name_resolve= ON
配置环境变量vim /etc/profile.d/mysql.shexport PATH=/usr/local/mysql/bin/:$PATH
编译安装mariadbcd /usr/local/mysql./scripts/mysql_install_db --user=mysql --datadir=/mydata/datacp support-files/mysql.server /etc/rc.d/init.d/mysqld
设置为开机自启动chkconfig --add mysqld
启动服务service mysqld start2、编译安装httpd-2.4
yum install pcre-devel apr-devel apr-util-devel openssl-devel
./configure --prefix=/app/httpd24 \
--enable-so \
--enable-ssl \
--enable-cgi \
--enable-rewrite \
--with-zlib \
--with-pcre \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork \
--with-included-apr
make -j 4 && make install    #-j 指定使用cpu核心数,根据cpu核心数而定3、编译安装php
(1)编译安装php-5.6
相关依赖包:libxml2-devel bzip2-devel libmcrypt-devel(epel)
编译安装:
./configure --prefix=/app/php --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-png-dir --with-jpeg-dir --with-freetype-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets   --with-apxs2=/app/httpd24/bin/apxs --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2
make -j 4 && make install   #-j 指定使用cpu核心数,根据cpu核心数而定
(2)编译安装php-7.1.7
编译安装
./configure --prefix=/app/php --enable-mysqlnd --with-mysqli=mysqlnd --with-openssl --with-pdo-mysql=mysqlnd --enable-mbstring --with-freetype-dir  --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --with-apxs2=/app/httpd24/bin/apxs --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --enable-maintainer-zts --disable-fileinfo
make -j 4 && make install   #-j 指定使用cpu核心数,根据cpu核心数而定
注意:php-7.0以上版本使用--enable-mysqlnd --with-mysqli=mysqlnd ,原--with-mysql不再支持为php提供配置文件cp php.ini-production /etc/php.ini
编辑apache配置文件httpd.conf,以使apache支持phpvim /etc/httpd24/conf/httpd.conf
(1)加二行
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
(2)定位至DirectoryIndex index.html
修改为DirectoryIndex index.php index.html
apachectl restart

7、编译安装FPM模式的LAMP

CentOS7编译安装FPM模式的LAMP

1、编译安装
tar xvf php-7.1.7.tar.bz2
cd php-7.1.7/
./configure --prefix=/app/php \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-openssl \
--with-pdo-mysql=mysqlnd \
--enable-mbstring \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--enable-xml \
--enable-sockets \
--enable-fpm \
--with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d \
--enable-maintainer-zts \
--disable-fileinfo2、准备php-fpm相关配置文件
cp php.ini-production /etc/php.ini
cp 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
cd /app/php/etc
cp php-fpm.conf.defaultphp-fpm.conf
cp php-fpm.d/www.conf.default php-fpm.d/www.conf
启动服务
service php-fpm start3、配置httpd支持php
vim /app/httpd24/conf/httpd.conf
取消下面两行的注释LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
修改下面行
<IfModuledir_module>DirectoryIndex index.php index.html
</IfModule>
加下面四行
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/app/httpd24/htdocs/$1

CentOS6编译安装FPM模式的LAMP

在centos6上编译安装LAMP:
mairadb:通用二进制格式,mariadb-5.5.56
httpd:编译安装,httpd-2.4.27
php5:编译安装,php-5.6.30
Wordpress: 安装wordpress-4.8-zh_CN.tar.gz
Xcache:编译安装xcache-3.2.0php5.4依赖于mariadb-devel包
实现顺序:mariadb-->httpd-->php1、编译httpd和二进制安装mariadb
安装相关依赖包bzip2-devel libxml2-devel libmcrypt-devel(epel源)
2、编译安装phpcd php-5.6.30/./configure --prefix=/app/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-di r--with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --enable-fpm  --with-mcrypt --with-config-file-path=/etc/php5 --with-config-file-scan-dir=/etc/php5.d --with-bz2make -j 4 && make install
3、实现php的配置文件和服务脚本mkdir /etc/php5 /etc/php5.d/cd php-5.6.30/cp php.ini-production /etc/php5/php.inicp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpmchmod +x /etc/rc.d/init.d/php-fpmchkconfig --add php-fpmchkconfig --list php-fpm
4、编辑php配置文件cd /app/php5/etccp php-fpm.conf.default php-fpm.confvim /app/php5/etc/php-fpm.confpm.max_children= 50pm.start_servers= 5pm.min_spare_servers= 2pm.max_spare_servers= 5 和pm.start_servers一致pid= /app/php5/var/run/php-fpm.pid
重启服务service php-fpm restart
5、修改httpd24的配置文件vim /app/apache24/conf/httpd.conf说明:启用httpd的相关模块在Apache httpd2.4以后已经专门有一个模块针对FastCGI的实现,此模块为mod_proxy_fcgi.so,它其实是作为mod_proxy.so模块的扩充,因此,这两个模块都要加载
去掉下面两行注释LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
添加如下二行AddType application/x-httpd-php .phpAddType application/x-httpd-php-source .phps
定位至DirectoryIndex index.html
修改为:DirectoryIndex index.php index.html
加下面两行ProxyRequests Off 关闭正向代理ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/app/httpd24/htdocs/$1
重启服务service httpd24 restart
6、测试
vim /app/httpd24/htdocs/index.php
如下:
<?php
$link = mysql_connect('127.0.0.1','root','magedu');
if ($link)echo "Success...";
elseecho "Failure...";
mysql_close();
phpinfo();
?>

Linux服务篇--LAMP架构相关推荐

  1. linux 查看目录拓扑图,Linux服务篇之九:构建Cacti监控平台

    Linux服务篇之九:构建Cacti监控平台 作为一名Linux SA,日常最重要的就是保证网站正常稳定的运行,我们需要实时监控网站.服务器的运行状态,这时需要借助开源软件(cacti.nagios. ...

  2. Linux服务篇--openssh服务

    Linux高级篇–SSH服务 一. SSH ssh: secure shell, protocol, 22/tcp, 安全的远程登录 具体的软件实现:   OpenSSH: ssh协议的开源实现,Ce ...

  3. linux服务篇-HTTP服务

    WWW=world wide web 万维网服务器,主要功能是提供网上信息浏览服务. 常见的web服务器:      PHP:apache,nginx Tomcat:JSP+Html ASP:IIS ...

  4. linux服务篇-Nagios监控

    Nagios是一款开源免费的网路监视工具(不准确,它也收费),可以监控的设备:Windows,Linux,Unix,Router,Switch,具有报警功能,是一个网络监控系统.它可以监视你指定的主机 ...

  5. Linux服务篇之FTP服务及工具

    文章目录 一.简介及工作原理 二.Linux部署FTP服务器 三.各种软件 一.简介及工作原理 FTP,File Transfer Protocol,文件传输协议. FTP是用于在网络上进行文件传输的 ...

  6. linux服务篇-DHCP服务

    DHCP服务概述: 名称:DHCP  - Dynamic Host Configuration Protocol  动态主机配置协议 功能:DHCP(Dynamic Host Configuratio ...

  7. linux服务篇-RSYNC数据备份

    Rsync(remote sync)是UNIX及类UNIX平台下一款神奇的数据镜像备份软件,它不像FTP或其他文件传输服务那样需要进行全备份,Rsync可以根据数据的变化进行差异备份,从而减少数据流量 ...

  8. linux服务篇-Xinetd服务

    Xinetd=eXtended InterNET services daemon(扩展互联网服务守护进程=超级互联网守护进程=超级服务),xinetd是新一代的网络守护进程服务程序,又叫超级Inter ...

  9. Linux服务篇之远程访问及控制SSH

    文章目录 1 SSH 1.1 SSH 概念 1.2 SSH 优点 2 SSH 远程管理 2.1 SSH 远程登录方式 2.2 故障集 2.3 OpenSSH 服务器 2.4 OpenSSH 服务包 3 ...

最新文章

  1. 深入Java单例模式
  2. 字符串原样输出程序python_Python格式化字符串(格式化输出)
  3. CodeForces - 1535E Gold Transfer(树上倍增+交互)
  4. 整数转罗马数字Python解法
  5. apache pdfbox_Apache PDFBox命令行工具:无需Java编码
  6. LeetCode 538. 把二叉搜索树转换为累加树(逆中序 根右左)
  7. pc css框架,PC端框架—semantic ui
  8. JS小技巧 ----- 遍历一个对象中所有属性
  9. Java基础知识强化之集合框架笔记50:Map集合之Map集合的概述和特点
  10. 图解PCIE原理(从软件角度)
  11. java无损压缩图片
  12. 格拉姆-施密特正交化
  13. java jks 转pfx_证书pfx转换成jks
  14. 周其仁:到以色列游学,让我深受刺激!
  15. 大型网站的演化之路——读《大型网站技术架构》
  16. 《Python代码审计》(1)一款超好用的代码扫描工具
  17. 系统注册表常用设置100例
  18. Android11 DHCP初识
  19. nginx缓冲区链表chain
  20. 在线教育项目技术笔记1

热门文章

  1. 101.symmetric-tree
  2. BLAST原理和用法总结(一)
  3. Spring各jar包的作用
  4. python+selenium h5新浪微博自动点赞
  5. php音频对比技术,HIFIDIY论坛-三种音频功放的音质特点比较 供参考 - Powered by Discuz!...
  6. 前端上班第一天-开发环境配置
  7. 自定义vue3.0日历组件
  8. MySQL查询自己的学号_Mysql 查询练习
  9. 搭建传奇游戏,都需要准备什么东西。
  10. 150本畅销书已选好,快来认领!!