标签:
LAMP(Linux- Apache-MySQL-PHP)网站架构是目前国际流行的Web框架,该框架包括:Linux操作系统,Apache网络服务器,MySQL数据库,Perl、PHP或者Python编程语言,所有组成产品均是开源软件,是国际上成熟的架构框架,很多流行的商业应用都是采取这个架构,和Java/J2EE架构相比,LAMP具有Web资源丰富、轻量、快速开发等特点,微软的.NET架构相比,LAMP具有通用、跨平台、高性能、低价格的优势,因此LAMP无论是性能、质量还是价格都是企业搭建网站的首选平台。本文主要描述LAMP的集中搭建架构以及编译安装LAMP环境,其中的P指PHP。
client http(请求index.php或者index.html)
--->apache(httpd web服务器响应,如果是静态文件,则直接响应,如果是动态请求则转向下一步)
--->php 接受请求(php解释器通过fastcgi响应,如果需要查询数据则转向一下)
--->透过mysql客户端查询数据库(mysql驱动)
--->mysql服务器响应数据库查询(返回查询结果)
LAMP根据业务访问量可以将其部署在一台机器上面,也可以分离部署到不通的机器,如下:
整合方案:LAMP
分离方案:
LA + P + M
LAP + M
LA + M + P
LAM + P
由于php有相关依赖性因此建议:
安装次序为httpd或mysql,再装php。
httpd把.php资源的请求“反向代理”至php服务器;httpd依赖于反向代理模块以及专用于fastcgi反向代理模块
httpd-2.2默认没有附带专用fastcgi反向代理模块,所以需要独立安装;
httpd-2.4已自带fastcgi反向模块,此模块为mod_proxy_fcgi.so,它其实是作为mod_proxy.so模块的扩充
httpd-2.4以前的版本中,要么把PHP作为Apache的模块运行,要么添加一个第三方模块支持PHP-FPM实现。
直接参考:Linux下编译安装Apache httpd 2.4
直接参考:Linux 下MySQL源码安装完整版
# vim /etc/httpd24/httpd.conf ###注意此处,我这里是单独编译安装的httpd2.4版本,所以路径有所不同
LoadModule proxy_module modeles/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
###在<IfModule mime_module>模块中添加
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
ProxyRequests Off ###关闭正向代理,开启下行的反向代理
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/usr/local/apache/htdocs/$1
DirectoryIndex index.php index.html
Aapache 需要按照上面的方法装载模块以及添加类型
Aapache 在配置反向代理时,应指定PHP服务器的IP地址及相应端口号,前后端路径可以不一致,后端应指定绝对路径
如前端为/var/www/html,后端为/website/www,则fcgi://127.0.0.1:9000/website/www/$1
PHP进程服务的配置文件php-fpm.conf配置文件中应修改监听配置
如假定PHP服务器的IP为192.168.1.253,此IP可接受外网请求
httpd.conf fcgi://192.168.1.253:9000
php-fpm.conf listen = 192.168.1.253:9000
1、动态模块方式:
prefork模式使用libphp5模块
worker和event模式则使用libphp5-zts模块
2、CGI方式:
CGI(Common Gateway Interface 简称通用网关接口)。
CGI是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的过程。
CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,
CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。
其工作流程如下:
a、浏览器通过HTML表单或超链接请求指向一个CGI应用程序的URL。
b、服务器收发到请求。
c、服务器执行指定CGI应用程序(开启进程)
d、CGI应用程序执行所需要的操作,通常是基于浏览者输入的内容。
e、CGI应用程序把结果格式化为网络服务器和浏览器能够理解的文档(通常是HTML网页)。
f、网络服务器把结果返回到浏览器中(销毁进程)
工作流图
3、FastCGI方式:
FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次。
(这是CGI最为人诟病的fork-and-execute 模式)。
它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。
a、Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)
b、FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。
c、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。
Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
e、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。
当FastCGI子进程关闭连接时,请求便告处理完成。
FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。
在CGI模式中,php-cgi在此便退出了。
FastCGI工作流图
4、CGI与FastCGI两者差异主要在于:
CGI在处理任何一个请求需要开启进程,销毁进程,开销较大
FastCGI会在初始化的时候启动多个cgi进程,监听来自网络的请求;
当处理完毕任务后则由FastCGI进程管理器回收管理,省去反复创建回收的开销。
以下是一个分离架构的LAMP编译安装后的环境
1、Web服务器
# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built: May 12 2016 10:27:23
# ifconfig|grep inet |head -1
inet 192.168.1.244 netmask 255.255.255.0 broadcast 192.168.1.255
###配置
# grep -E "Proxy|php" /etc/httpd/conf/httpd.conf
DirectoryIndex index.php index.html
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.1.245:9000/usr/local/apache/htdocs/tmp/$1
2、MySQL服务器
# cat /etc/redhat-release
CentOS release 6.7 (Final)
# mysql -V
mysql Ver 14.14 Distrib 5.6.30, for Linux (x86_64) using EditLine wrapper
# ifconfig|grep inet |head -1
inet addr:192.168.1.242 Bcast:192.168.1.255 Mask:255.255.255.0
3、PHP服务器
# more /etc/redhat-release ### Author : Leshami
CentOS release 6.7 (Final) ### Blog : http://blog.csdn.net/leshami
# ./php -v
PHP 5.6.9 (cli) (built: Jul 17 2016 18:45:50)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
# ifconfig|grep inet |head -1
inet addr:192.168.1.245 Bcast:192.168.1.255 Mask:255.255.255.0
# grep -vE ";|^#" /usr/local/php/etc/php-fpm.conf|grep listen
listen = 192.168.1.245:9000
### PHP服务器上的测试页面
# vim /var/www/html/connmysql.php
<?php
$conn = mysql_connect(‘192.168.1.242‘,‘root‘,‘***‘);
if ($conn)
echo "succ";
else
echo "failure";
mysql_close();
?>
4、在DB服务器上验证测试页
# ifconfig|grep inet |head -1
inet addr:192.168.1.242 Bcast:192.168.1.255 Mask:255.255.255.0
# curl http://192.168.1.244/connmysql.php
succ
标签:
原文地址:http://blog.csdn.net/leshami/article/details/51944920