SlideShare a Scribd company logo
PHP & Web Servers -- 大罗 (Rollenc)
Directory Request Circle Apache & php_mod  php_mod Circle mpm & mpm_prefork FastCGI Start a FastCGI FastCGI with mpm_worker Nginx & LightHTD
Apache Request Circle
Apache Request Circle(1) 1 、 Post-Read-Request 阶段 在正常请求处理流程中,这是模块可以插入钩子的第一个阶段。 对于那些想很早进入处理请求的模块来说,这个阶段可以被利用。 2 、 URI Translation 阶段 Apache 在本阶段的主要工作:将请求的 URL 映射到本地文件系统。 模块可以在这阶段插入钩子,执行自己的映射逻辑。 mod_alias 就是利用这个阶段工作的。 3 、 Header Parsing 阶段 Apache 在本阶段的主要工作:检查请求的头部。由于模块可以在请求 处理流程的任何一个点上执行检查请求头部的任务,因此这个钩子很少被使用。 mod_setenvif 就是利用这个阶段工作的。
Apache  Request Circle(2) 4 、 Access Control 阶段 Apache 在本阶段的主要工作:根据配置文件检查是否允许访问请求的资源。 Apache 的标准逻辑实现了允许和拒绝指令。 mod_authz_host 就是利用这个阶段工作的。 5 、 Authentication 阶段 Apache 在本阶段的主要工作:按照配置文件设定的策略对用户进行认证, 并设定用户名区域。模块可以在这阶段插入钩子,实现一个认证方法。 6 、 Authorization 阶段 Apache 在本阶段的主要工作:根据配置文件检查是否允许认证过的用户 执行请求的操作。模块可以在这阶段插入钩子,实现一个用户权限管理的方法。
Apache Request Circle(3) 7 、 MIME Type Checking 阶段 Apache 在本阶段的主要工作:根据请求资源的 MIME 类型的相关规则,判定 将要使用的内容处理函数。标准模块 mod_negotiation 和 mod_mime 实现了这个钩子。 8 、 FixUp 阶段 这是一个通用的阶段,允许模块在内容生成器之前,运行任何必要的处理流程。 和 Post_Read_Request 类似,这是一个能够捕获任何信息的钩子, 也是最常使用的钩子。 9 、 Response 阶段 Apache 在本阶段的主要工作:生成返回客户端的内容,负责给客户端发送 一个恰当的回复。这个阶段是整个处理流程的核心部分。
Apache Request Circle(4) 10 、 Logging 阶段 Apache 在本阶段的主要工作:在回复已经发送给客户端之后记录事务。 模块可能修改或者替换 Apache 的标准日志记录。 11 、 CleanUp 阶段 Apache 在本阶段的主要工作:清理本次请求事务处理完成之后遗留的环境, 比如文件、目录的处理或者 Socket 的关闭等等,这是 Apache 一次请求处理 的最后一个阶段。
Nginx Request Circle(1) NGX_HTTP_POST_READ_PHASE        // 读取请求阶段 NGX_HTTP_SERVER_REWRITE_PHASE    //Server URI 转换阶段 NGX_HTTP_FIND_CONFIG_PHASE         // 查找相应的配置来执行阶段 NGX_HTTP_REWRITE_PHASE               //URI 转换阶段 NGX_HTTP_POST_REWRITE_PHASE      // 对转换后的 URL 结果进行处理的阶段 NGX_HTTP_PREACCESS_PHASE           // 权限检查准备阶段
Nginx Request Circle(2) NGX_HTTP_ACCESS_PHASE                // 权限检查阶段 NGX_HTTP_POST_ACCESS_PHASE       // 对权限检查结果进行处理阶段 NGX_HTTP_TRY_FILES_PHASE            // 处理配置中的 try_files 阶段 NGX_HTTP_CONTENT_PHASE             // 处理生成返回数据阶段 NGX_HTTP_LOG_PHASE                    // 记录日志处理阶段,具体说明应当是请求完成后,关闭请求时处理
php_mod Circle 1 、 Apache 接收请求。 2 、 Apache 传递请求给 mod_php 。 3 、 mod_php 定位磁盘文件,并加载到内存中。 4 、 mod_php 编译源代码成为 opcode 树。 (APC) 5 、 mod_php 执行 opcode 树。
mpm This Multi-Processing Module (MPM) implements a hybrid multi-process multi-threaded server. By using threads to serve requests, it is able to serve a large number of requests with less system resources than a process-based server. Yet it retains much of the stability of a process-based server by keeping multiple processes available, each with many threads.
mpm_prefork 进程模式,预先申请 单进程内存暂用约: 1.7M With mod_php: 3.7M
mpm_worker 支持多线程和多进程混合模型的 MPM 线程 * 进程 单进程内存暂用约: 2.1M ~ 4.3M PHP 部分模块是非线程安全
  FastCGI  建立一个 HTTP/Socket ,和 webserver 交互 + Apache/Nginx/lighttpd
Nginx & LightTPD 静态文件处理: 通过 sendfile 接口 ,  把这个请求委托给操作系统内核处理 . sendfile() 是作用于数据拷贝在两个文件描述符之间的操作函数 . 这个拷贝操作是内核中操作的 , 所以称为 " 零拷贝 ".sendfile 函数比起 read 和 write 函数高效得多 , 因为 read 和 write 是要把数据拷贝到用户应用层操作 .
FastCgi Circle Web  Server 建立  FastCGI  程序处理需求。  FastCGI  程序可以在启动时就被建立,也可以等到召唤时才建立。 FastCGI  程序建立后,先初始本身状态,接著等待一個來自  Web  Server 的连接。 当  client  的需求來到時,  Web  Server 就建立一条到  FastCGI 程序间的连接,并将  CGI  环境变量及标准環境變數及標準輸入的資料送入該連線。 FastCGI  程序則將標準輸出及標準錯誤的資料,透過同一條連線送 回給伺服器。 當  FastCGI  程序關閉這條連線後,才表示需求處理完畢,  FastCGI  程序則繼續等待其他的連線。
Start a FastCGI /usr/bin/php-cgi -q -b localhost:9000  (2.1M) /usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 \    -C 2 -u www-data -f /usr/bin/php5-cgi  (2.4M)
Apache + FastCGI 1. Apache mod_fastcgi AddHandler fcgid-script .php Options +ExecCGI FcgidWrapper /usr/local/bin/php-wrapper .php 2. Apache mod_fcgid AddHandler fastcgi-script php
Nginx + FastCGI # Vhosts fastcgi config fastcgi_pass  127.0.0.1:9000; fastcgi_index index.php; location ~ \.php$ { include        /etc/nginx/fastcgi.conf; fastcgi_param  SCRIPT_FILENAME  /home/rollenc/luochunhui.com/web/$fastcgi_script_name; }
Nginx & LightTPD 读取准备: epoll  是为处理大批量句柄而作了改进的 poll 。 三个系统调用: epoll_create(2) ,  epoll_ctl(2) ,  epoll_wait(2) 。 epoll 仅仅是一个异步事件的通知机制,其本身并不作任何的 IO 读写操作,它只负责告诉你是不是可以读或可以写 了,而具体的读写操作,还要应用层自己来作。
Diff 1. Apache && Nginx  输出有 Buffer      堵塞 render 函数 2. Lighttpd  无 buffer      别输出大数据量,比如       echo file_get_contents($bigfile);
Ref Nginx  的中文维基  http://wiki.nginx.org/NginxChs 啃饼的技术博客  http://blog.csdn.net/kenbinzhang Apache 服务的工作原理  http://blog.tianya.cn/blogger/post_show.asp?BlogID=40003&PostID=4585547 netpet( 凌晓 ) 的博客  http://blog.csdn.net/netpet/default.aspx?PageNumber=2 Emiller 的 Nginx 模块开发指南 中文草稿  http://yaoweibin.cn/maindoc/nginx-modules-guide-cn.pdf  浪湾 (langwan)  http://hi.baidu.com/langwan/blog/category/%D4%B4%C2%EB%B7%D6%CE%F6 Multi-Processing Modules (MPMs) http://httpd.apache.org/docs/2.0/mpm.html Apache Worker and PHP  http://brian.moonspot.net/2008/02/13/apache-worker-and-php/ Google: http://www.google.com/
Q & A  
Thanks

More Related Content

What's hot (19)

PPT
Mysql展示功能与源码对应
zhaolinjnu
 
PDF
PHP 應用之一 socket funion : 偽 WEB Server
志賢 黃
 
PDF
ELK日志分析搭建过程文档
果 果
 
PDF
Rpc原理与实现
wavefly
 
PPTX
Java API for WebSocket 實作介紹
My own sweet home!
 
PPTX
Asp.net 5 新功能與變革
Gelis Wu
 
DOC
Apache配置文件说明
wensheng wei
 
DOC
Mysql Replication
liufabin 66688
 
ODP
RESTful
PingLun Liao
 
PPTX
Asp.net mvc 6 新功能初探
Gelis Wu
 
PDF
Cent os 安装 subversion
YUCHENG HU
 
DOCX
Apache与tomcat的三种连接方式
xddong77
 
PDF
-Nginx book
山城 碧海
 
PDF
Apache trafficserver
Din Dindin
 
PPTX
Hadoop监控
snakebbf
 
PPT
Software Engineer Talk
Larry Cai
 
PPT
Aswan&hump
wang hongjiang
 
PPTX
使用Rpm&yum进行基础软件管理
haiyuan ning
 
PDF
The Rails 4 Way Chapter 1
Drake Huang
 
Mysql展示功能与源码对应
zhaolinjnu
 
PHP 應用之一 socket funion : 偽 WEB Server
志賢 黃
 
ELK日志分析搭建过程文档
果 果
 
Rpc原理与实现
wavefly
 
Java API for WebSocket 實作介紹
My own sweet home!
 
Asp.net 5 新功能與變革
Gelis Wu
 
Apache配置文件说明
wensheng wei
 
Mysql Replication
liufabin 66688
 
RESTful
PingLun Liao
 
Asp.net mvc 6 新功能初探
Gelis Wu
 
Cent os 安装 subversion
YUCHENG HU
 
Apache与tomcat的三种连接方式
xddong77
 
-Nginx book
山城 碧海
 
Apache trafficserver
Din Dindin
 
Hadoop监控
snakebbf
 
Software Engineer Talk
Larry Cai
 
Aswan&hump
wang hongjiang
 
使用Rpm&yum进行基础软件管理
haiyuan ning
 
The Rails 4 Way Chapter 1
Drake Huang
 

Viewers also liked (8)

DOC
Dicionário de política
CarlaRosario
 
PPTX
宝岛Q1方案11.16
samon127
 
PPT
面向搜索引擎的友好程序开发
samon127
 
PDF
Rock scissors-paper-kata
Franco Lombardo
 
DOC
Dicionário digital
CarlaRosario
 
PPT
基于架构的开发模式
samon127
 
DOC
Dicionário de política
CarlaRosario
 
PDF
Set 3-kertas-2-sains-pmr-sederhana
Linda Mahmood
 
Dicionário de política
CarlaRosario
 
宝岛Q1方案11.16
samon127
 
面向搜索引擎的友好程序开发
samon127
 
Rock scissors-paper-kata
Franco Lombardo
 
Dicionário digital
CarlaRosario
 
基于架构的开发模式
samon127
 
Dicionário de política
CarlaRosario
 
Set 3-kertas-2-sains-pmr-sederhana
Linda Mahmood
 
Ad

Similar to Php Webservers (20)

PPT
高性能并发Web服务器实现核心内幕
ideawu
 
DOC
Apache服务器配置全攻略
Yiwei Ma
 
PDF
大话Php之性能
liqiang xu
 
PDF
PHP運作原理 主要介紹PHP程式語言建構WEB 架構,其運作原理及網站製作架構技術說明。
mengandli
 
PDF
高性能LAMP程序设计
fuchaoqun
 
PDF
Asp.net mvc網站的從無到有
Wade Huang
 
PPT
Html5
cazhfe
 
PPTX
Asp.net core v1.0
國昭 張
 
PPTX
Asp.net core v1.0
chang kuo-chao
 
PPT
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
Scourgen Hong
 
PPTX
Node.js长连接开发实践
longhao
 
PPT
Exodus2 大局观
wang hongjiang
 
PDF
OpenWebSchool - 11 - CodeIgniter
Hung-yu Lin
 
DOC
线程编程方面
yiditushe
 
PPTX
利用Signalr打造即時通訊@Tech day geek
Johnson Gau
 
PPT
摘星
zenyuhao
 
PPT
高性能网站最佳实践
longhao
 
PDF
Lucene 全文检索实践
yiditushe
 
PDF
NodeJS基礎教學&簡介
GO LL
 
DOC
Nginx+常见应用技术指南
andy54321
 
高性能并发Web服务器实现核心内幕
ideawu
 
Apache服务器配置全攻略
Yiwei Ma
 
大话Php之性能
liqiang xu
 
PHP運作原理 主要介紹PHP程式語言建構WEB 架構,其運作原理及網站製作架構技術說明。
mengandli
 
高性能LAMP程序设计
fuchaoqun
 
Asp.net mvc網站的從無到有
Wade Huang
 
Html5
cazhfe
 
Asp.net core v1.0
國昭 張
 
Asp.net core v1.0
chang kuo-chao
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
Scourgen Hong
 
Node.js长连接开发实践
longhao
 
Exodus2 大局观
wang hongjiang
 
OpenWebSchool - 11 - CodeIgniter
Hung-yu Lin
 
线程编程方面
yiditushe
 
利用Signalr打造即時通訊@Tech day geek
Johnson Gau
 
摘星
zenyuhao
 
高性能网站最佳实践
longhao
 
Lucene 全文检索实践
yiditushe
 
NodeJS基礎教學&簡介
GO LL
 
Nginx+常见应用技术指南
andy54321
 
Ad

Php Webservers

  • 1. PHP & Web Servers -- 大罗 (Rollenc)
  • 2. Directory Request Circle Apache & php_mod  php_mod Circle mpm & mpm_prefork FastCGI Start a FastCGI FastCGI with mpm_worker Nginx & LightHTD
  • 4. Apache Request Circle(1) 1 、 Post-Read-Request 阶段 在正常请求处理流程中,这是模块可以插入钩子的第一个阶段。 对于那些想很早进入处理请求的模块来说,这个阶段可以被利用。 2 、 URI Translation 阶段 Apache 在本阶段的主要工作:将请求的 URL 映射到本地文件系统。 模块可以在这阶段插入钩子,执行自己的映射逻辑。 mod_alias 就是利用这个阶段工作的。 3 、 Header Parsing 阶段 Apache 在本阶段的主要工作:检查请求的头部。由于模块可以在请求 处理流程的任何一个点上执行检查请求头部的任务,因此这个钩子很少被使用。 mod_setenvif 就是利用这个阶段工作的。
  • 5. Apache  Request Circle(2) 4 、 Access Control 阶段 Apache 在本阶段的主要工作:根据配置文件检查是否允许访问请求的资源。 Apache 的标准逻辑实现了允许和拒绝指令。 mod_authz_host 就是利用这个阶段工作的。 5 、 Authentication 阶段 Apache 在本阶段的主要工作:按照配置文件设定的策略对用户进行认证, 并设定用户名区域。模块可以在这阶段插入钩子,实现一个认证方法。 6 、 Authorization 阶段 Apache 在本阶段的主要工作:根据配置文件检查是否允许认证过的用户 执行请求的操作。模块可以在这阶段插入钩子,实现一个用户权限管理的方法。
  • 6. Apache Request Circle(3) 7 、 MIME Type Checking 阶段 Apache 在本阶段的主要工作:根据请求资源的 MIME 类型的相关规则,判定 将要使用的内容处理函数。标准模块 mod_negotiation 和 mod_mime 实现了这个钩子。 8 、 FixUp 阶段 这是一个通用的阶段,允许模块在内容生成器之前,运行任何必要的处理流程。 和 Post_Read_Request 类似,这是一个能够捕获任何信息的钩子, 也是最常使用的钩子。 9 、 Response 阶段 Apache 在本阶段的主要工作:生成返回客户端的内容,负责给客户端发送 一个恰当的回复。这个阶段是整个处理流程的核心部分。
  • 7. Apache Request Circle(4) 10 、 Logging 阶段 Apache 在本阶段的主要工作:在回复已经发送给客户端之后记录事务。 模块可能修改或者替换 Apache 的标准日志记录。 11 、 CleanUp 阶段 Apache 在本阶段的主要工作:清理本次请求事务处理完成之后遗留的环境, 比如文件、目录的处理或者 Socket 的关闭等等,这是 Apache 一次请求处理 的最后一个阶段。
  • 8. Nginx Request Circle(1) NGX_HTTP_POST_READ_PHASE        // 读取请求阶段 NGX_HTTP_SERVER_REWRITE_PHASE    //Server URI 转换阶段 NGX_HTTP_FIND_CONFIG_PHASE         // 查找相应的配置来执行阶段 NGX_HTTP_REWRITE_PHASE               //URI 转换阶段 NGX_HTTP_POST_REWRITE_PHASE      // 对转换后的 URL 结果进行处理的阶段 NGX_HTTP_PREACCESS_PHASE           // 权限检查准备阶段
  • 9. Nginx Request Circle(2) NGX_HTTP_ACCESS_PHASE                // 权限检查阶段 NGX_HTTP_POST_ACCESS_PHASE       // 对权限检查结果进行处理阶段 NGX_HTTP_TRY_FILES_PHASE            // 处理配置中的 try_files 阶段 NGX_HTTP_CONTENT_PHASE             // 处理生成返回数据阶段 NGX_HTTP_LOG_PHASE                    // 记录日志处理阶段,具体说明应当是请求完成后,关闭请求时处理
  • 10. php_mod Circle 1 、 Apache 接收请求。 2 、 Apache 传递请求给 mod_php 。 3 、 mod_php 定位磁盘文件,并加载到内存中。 4 、 mod_php 编译源代码成为 opcode 树。 (APC) 5 、 mod_php 执行 opcode 树。
  • 11. mpm This Multi-Processing Module (MPM) implements a hybrid multi-process multi-threaded server. By using threads to serve requests, it is able to serve a large number of requests with less system resources than a process-based server. Yet it retains much of the stability of a process-based server by keeping multiple processes available, each with many threads.
  • 13. mpm_worker 支持多线程和多进程混合模型的 MPM 线程 * 进程 单进程内存暂用约: 2.1M ~ 4.3M PHP 部分模块是非线程安全
  • 14.   FastCGI  建立一个 HTTP/Socket ,和 webserver 交互 + Apache/Nginx/lighttpd
  • 15. Nginx & LightTPD 静态文件处理: 通过 sendfile 接口 ,  把这个请求委托给操作系统内核处理 . sendfile() 是作用于数据拷贝在两个文件描述符之间的操作函数 . 这个拷贝操作是内核中操作的 , 所以称为 " 零拷贝 ".sendfile 函数比起 read 和 write 函数高效得多 , 因为 read 和 write 是要把数据拷贝到用户应用层操作 .
  • 16. FastCgi Circle Web  Server 建立 FastCGI 程序处理需求。 FastCGI 程序可以在启动时就被建立,也可以等到召唤时才建立。 FastCGI 程序建立后,先初始本身状态,接著等待一個來自 Web  Server 的连接。 当 client 的需求來到時, Web  Server 就建立一条到 FastCGI 程序间的连接,并将 CGI 环境变量及标准環境變數及標準輸入的資料送入該連線。 FastCGI 程序則將標準輸出及標準錯誤的資料,透過同一條連線送 回給伺服器。 當 FastCGI 程序關閉這條連線後,才表示需求處理完畢, FastCGI 程序則繼續等待其他的連線。
  • 17. Start a FastCGI /usr/bin/php-cgi -q -b localhost:9000  (2.1M) /usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 \    -C 2 -u www-data -f /usr/bin/php5-cgi  (2.4M)
  • 18. Apache + FastCGI 1. Apache mod_fastcgi AddHandler fcgid-script .php Options +ExecCGI FcgidWrapper /usr/local/bin/php-wrapper .php 2. Apache mod_fcgid AddHandler fastcgi-script php
  • 19. Nginx + FastCGI # Vhosts fastcgi config fastcgi_pass  127.0.0.1:9000; fastcgi_index index.php; location ~ \.php$ { include        /etc/nginx/fastcgi.conf; fastcgi_param  SCRIPT_FILENAME  /home/rollenc/luochunhui.com/web/$fastcgi_script_name; }
  • 20. Nginx & LightTPD 读取准备: epoll 是为处理大批量句柄而作了改进的 poll 。 三个系统调用: epoll_create(2) , epoll_ctl(2) , epoll_wait(2) 。 epoll 仅仅是一个异步事件的通知机制,其本身并不作任何的 IO 读写操作,它只负责告诉你是不是可以读或可以写 了,而具体的读写操作,还要应用层自己来作。
  • 21. Diff 1. Apache && Nginx 输出有 Buffer      堵塞 render 函数 2. Lighttpd 无 buffer      别输出大数据量,比如      echo file_get_contents($bigfile);
  • 22. Ref Nginx 的中文维基 http://wiki.nginx.org/NginxChs 啃饼的技术博客 http://blog.csdn.net/kenbinzhang Apache 服务的工作原理 http://blog.tianya.cn/blogger/post_show.asp?BlogID=40003&PostID=4585547 netpet( 凌晓 ) 的博客 http://blog.csdn.net/netpet/default.aspx?PageNumber=2 Emiller 的 Nginx 模块开发指南 中文草稿 http://yaoweibin.cn/maindoc/nginx-modules-guide-cn.pdf  浪湾 (langwan)  http://hi.baidu.com/langwan/blog/category/%D4%B4%C2%EB%B7%D6%CE%F6 Multi-Processing Modules (MPMs) http://httpd.apache.org/docs/2.0/mpm.html Apache Worker and PHP http://brian.moonspot.net/2008/02/13/apache-worker-and-php/ Google: http://www.google.com/
  • 23. Q & A