本文主要是介绍Linux服务篇--LAMP架构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本章概要
- 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架构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!