Your SlideShare is downloading. ×
0
Php Webservers
Php Webservers
Php Webservers
Php Webservers
Php Webservers
Php Webservers
Php Webservers
Php Webservers
Php Webservers
Php Webservers
Php Webservers
Php Webservers
Php Webservers
Php Webservers
Php Webservers
Php Webservers
Php Webservers
Php Webservers
Php Webservers
Php Webservers
Php Webservers
Php Webservers
Php Webservers
Php Webservers
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Php Webservers

1,668

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,668
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
21
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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
  • 3. Apache Request Circle
  • 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.
  • 12. mpm_prefork 进程模式,预先申请 单进程内存暂用约: 1.7M With mod_php: 3.7M
  • 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  
  • 24. Thanks

×