lamp基础之lamp(php-fpm)的实现

大纲:

1. CGI和fastcgi对比分析 

2. 用三台主机以fast-cgi的方式实现lamp并安装wordpress

3. 对输出结果的详解

一、CGI和fastcgi对比分析 

 lamp 安装http和php的结合方式可以分为三种:

    1.php作为http的模块

    2.以cgi模式结合(极少使用)

    3.以fastcgi模式结合

CGI 简介

CGI全称是“通用网关接口”(Common Gateway Interface),它可以让一个客户端,从网页浏览器向执行在Web服务器上的程序请求数据。 CGI描述了客户端和这个程序之间传输数据的一种标准。 CGI的一个目的是要独立于任何语言的,所以CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。 如php,perl,tcl等。

CGI 的运行原理

  1. 客户端访问某个 URL 地址之后,通过 GET/POST/PUT 等方式提交数据,并通过 HTTP 协议向 Web 服务器发出请求。
  2. 服务器端的 HTTP Daemon(守护进程)启动一个子进程。然后在子进程中,将 HTTP 请求里描述的信息通过标准输入 stdin 和环境变量传递给 URL 指定的 CGI 程序,并启动此应用程序进行处理,处理结果通过标准输出 stdout 返回给 HTTP Daemon 子进程。
  3. 再由 HTTP Daemon 子进程通过 HTTP 协议返回给客户端。

上面的这段话理解可能还是比较抽象,下面我们就通过一次 GET 请求为例进行详细说明。

如图所示,本次请求的流程如下:

  1. 客户端访问 http://127.0.0.1:9003/cgi-bin/user?id=1
  2. 127.0.0.1 上监听 9003 端口的守护进程接受到该请求
  3. 通过解析 HTTP 头信息,得知是 GET 请求,并且请求的是 /cgi-bin/ 目录下的 user 文件。
  4. 将 uri 里的 id=1 通过存入 QUERY_STRING 环境变量。
  5. Web 守护进程 fork 一个子进程,然后在子进程中执行 user 程序,通过环境变量获取到id
  6. 执行完毕之后,将结果通过标准输出返回到子进程。
  7. 子进程将结果返回给客户端。

FastCGI 简介

FastCGI是Web服务器和处理程序之间通信的一种协议, 是CGI的一种改进方案,FastCGI像是一个常驻(long-lived)型的CGI, 它可以一直执行,在请求到达时不会花费时间去fork一个进程来处理(这是CGI最为人诟病的fork-and-execute模式)。 正是因为他只是一个通信协议,它还支持分布式的运算,所以 FastCGI 程序可以在网站服务器以外的主机上执行,并且可以接受来自其它网站服务器的请求。

FastCGI 是与语言无关的、可伸缩架构的 CGI 开放扩展,将 CGI 解释器进程保持在内存中,以此获得较高的性能。 CGI 程序反复加载是 CGI 性能低下的主要原因,如果 CGI 程序保持在内存中并接受 FastCGI 进程管理器调度, 则可以提供良好的性能、伸缩性、Fail-Over 特性等。

总结:

  • mode_php 是Apache 的一个模块,把PHP 解释器嵌入到Apache 进程中。
  • CGI 和FastCGI 分别是一种协议。Web Server 实现了CGI 或FastCGI 协议的相应的应用程序(以下简称CGI 或FastCGI),就可以启动PHP 解释器处理PHP 请求。它们都是以独立进程的形式存在。
  • mode_php 和FastCGI 在 单个进程中可以处理多个请求,CGI 在单个进程中只能处理一个请求。

php-cgi 是一种CGI 协议的实现

  • php-cgi 其实就是PHP 解析器
  • 在CGI 模式时,当Web Server 收到 xx/index.php 请求时,会启动php-cgi,php-cgi 会解析php.ini 文件,初始化环境,然后根据请求参数进行处理,再返回处理后的结果。(都是以CGI 协议规范来进行)
  • php-cgi 在每个请求时都会启动一个进程,然后读取php.ini 进行解析,可想而知效率相对比较低。
  • php-cgi 无法实现平滑重启。修改php.ini 配置后,后面启动的php-cgi 程序还是不会感知。

php-fpm 即FastCGI Process Management,是一种FastCGI 协议的实现

  • 当请求到来时,php-fpm 启动并读取php.ini 文件完成初始化环境,然后启动一个master,再启动多个worker。当请求过来时,master 会传递给一个worker,然后等待下一个请求。php-fpm 会动态配置worker 的数量。
  • 一个php-fpm 进程可以处理多个请求,会启动多个php-cgi 程序。当worker不够用时,master可以根据配置预先启动几个worker等着;当然空闲worker太多时,也会停掉一些,这样就提高了性能,也节约了资源
  • php-fpm 可以实现平衡重启。修改php.ini 后,当启用新的worker 会使用新的配置。

在实际生产中由于压力较大,所以amp一般是分别独立的服务器,甚至是服务器组,而且使用的是高可用集群,以分担单个服务器的压力,同时避免单点故障,所以本次将利用三台主机来模拟lamp的工作场景。

1.安装并启动服务:

yum install -y php-fpm httpd php-mysql mariadb-server

systemctl start httpd mariadb

mysql_secure_installation

2.配置httpd的虚拟主机并支持fpm

<VirtualHost *:80>

ServerName www.magedu.com

DocumentRoot "/vhosts/www"

<Directory "/vhosts/www">

Options None

AllowOverride None

Require all granted

</Directory>

ProxyRequests Off

ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/vhosts/www/$1

ProxyPassMatch ^/(ping|status)/?$ fcgi://127.0.0.1:9000/$1

DirectoryIndex index.php

</VirtualHost>

[[email protected] ~]# mkdir /vhosts/www -pv

[[email protected] www]# ls

index.php

[[email protected] www]# cat index.php

<?php

phpinfo();

?>

3.编辑fpm的配置文件:

[[email protected] pma]# vim /etc/php-fpm.d/www.conf

[pool_id]

listen = 127.0.0.1:9000

listen.backlog = -1

listen.allowed_clients = 127.0.0.1

user = apache

group = apache

pm = dynamic

定义processor管理机制:static, dynamic

pm.max_children:最大子进程数量;连接池的最大容量;

pm.start_servers:服务启动时所启动的子进程数量;

pm.min_spare_servers

pm.max_spare_servers

rlimit_files = 1024

rlimit_core = 0

pm.status_path = /status

ping.path = /ping

ping.response = pong

php_value[session.save_path] = /var/lib/php/session

session的存储位置

4.重新启动httpd和php-fpm服务

5.测试

a在浏览器中输入http://10.1.252.228/status?full 以及http://10.1.252.228/ping 看看是否会响应pong

pool:                 www

process manager:      dynamic

start time:           11/Oct/2016:21:15:46 +0800

start since:          577

accepted conn:        16

listen queue:         0

max listen queue:     1

listen queue len:     128

idle processes:       4

active processes:     3

total processes:      7

max active processes: 3

max children reached: 0

slow requests:        0

b解压phpmysqladmin到/vhost/www下看是否可以进入

#yum install -y  php-mbstring, php-mcrypt, php-xcache

注意:一定要记得创建/var/lib/php/session目录,并且给apache用户权限

时间: 2024-10-25 02:18:56

lamp基础之lamp(php-fpm)的实现的相关文章

lamp基础搭建

lamp是目前web服务器最基础的框架,理解其主要原理可以帮助我们在更高层次的学习和操作中事半功倍. LAMP的组成: a: apache (httpd) m: mysql, mariadb p: php或perl或python(此次使用的是php) 数据库(mysql.mariadb): 作为数据库来说,centos 6和centos 7操作上没太多的不同,只不过,一个6上叫mysql.进程名叫mysqld,7上叫mariadb.进程名叫mariadb.service.而我认为,既然是一个库,

再不写,我怕就再也不写了-LAMP基础

hi 经历了4天大餐的洗礼,整个人都思密达了...昨天的懒,是没有原因的懒,总之就是该提笔了亲 1.Ubuntu下的LAMP配置 -----Ubuntu基础知识----- ----管理员权限 出于安全,Ubuntu不推荐使用root账户远程登录-强制使用其他普通账户 由于普通账户没有超级管理员权限,默认情况下又不能使用root账户登录(远程等),所以需要用到这么两条命令 su(Switch User)切换到超级管理员 sudo(Switch User and DO)以超级管理员身份执行 两者是有

lamp 基础应用

======================================================================== 概述: Lamp介绍 ★资源类型: 静态资源: 原始形式与响应给客户端的结果一致:服务端仅仅提供一些内容展示功能,如网页内容展示,图片列表,动画播放等,服务端不需要和客户端进行互动,所有的资源可以直接去获取,但是无法进行资源上传: 动态资源: 原始形式通常为程序文件(为某种编程语言开发),需要运行后将生成的结果展示给客户端:即:服务端可以与客户端进行互

lamp基础应用(二)

概述: ========================================================================================= 回顾: lamp 详解 1.php嵌入式web应用编程语言 ★作者: Rasmus Lerdorf,Personal Home Page tool, C语言(CGI,Web Forms), PHP/FI zeev, andi重写php的解析器, zend engine 1.0, php 4.0; zend en

LAMP基础及其基于rpm方式的构建

本文将初步介绍什么是LAMP,其组合方式有哪几种,一次完整的请求流程是怎样进行的,以及基于rpm安装的方式构建一个简单的LAMP并测试之. 1.LAMP组合及一次完整的请求流程 2.LAMP的组合方式 3.基于rpm包安装构建LAMP 4.基于虚拟机www.a.com创建wordpress 5.基于虚拟机www.b.org创建phpMyAdmin

第二十二天 IO模型理论、数据库基础、LAMP平台基础理论及MySQL安装部署

一.I/O模型理论 http或https都是基于tcp协议完成通讯.在tcp中使用socket通讯模型,在domain中界定socket是如何定义.                           domain有三种工作类型:                                        unix domain:每个socket地址是个文件路径                                        ipv4 domain:每个socket是ipv4:p

LAMP基础上安装phpMyAdmin及WordPress

所需要的程序包:httpd, php, php-mysql, mysql-server        程序包都安装完成之后启动服务:              service httpd start              service mysqld start 测试                   测试php程序与mysql通信                    在用户的网站程序目录下编辑            # vim /var/www/html/test.php       

LAMP基础

一.介绍 http服务通信过程 从发送端到接收端,所包含的头部信息,一层一层剥离. URN: Uniform Resource Naming,统一资源命名 示例: P2P下载使用的磁力链接是URN的一种实现 magnet:?xt=urn:btih:660557A6890EF888666 URL: Uniform Resorce Locator,统一资源定位符,用于 描述某服务器某特定资源位置 两者区别:URN如同一个人的名称,而URL代表一个人的 住址.换言之,URN定义某事物的身份,而URL提

lamp之调试lamp和ab压力测试

LAMP: php和mysql建立关联: php-mysql #yum install php-mysql yum安装的时候才用,编译安装不需要 php连接mysql测试脚本: #vim index.php <?php $conn = mysql_connect("HOST","USERNAME","PASSWORD") or die("connect err: ".mysql_error()); echo "