通过对nginx中FastCgi进程管理器的学习,了解php动态网站的网页的生成过程、nginx解析php程序的步骤...

news/2024/4/30 19:00:48/文章来源:https://blog.csdn.net/weixin_34233618/article/details/88738847

关于factcgi和cgi的学习

1、FastCGI是什么?
首先我们看下CGI,CGI全称为通用网关接口 Common Cateway Interface.用于HTTP服务上的程序服务通信交流的一种工具,可以让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数据。CGI描述了服务器和请求处理程序之间传输数据的一种标准。 CGI程序必须运行在网络服务器上。常见的如php-cgi.exe。是php支持CGI标准的执行档。
CGI的工作原理:每当客户请求CGI的时候,WEB服务器就请求操作系统生成一个新的解释器进程(如php-cgi.exe),当CGI进程完成当前任务结束后,web服务器就会杀死这个进程。
但是CGI接口方式性能较差,由于每次HTTP服务器遇到动态程序都需要重启解析器来执行解析,拿php举例,每一个web请求,php都必须重新解析php.ini、重新载入全部dll扩展并重新初始化全部数据结构,你可以想象这样多慢。这在处理高并发的问题时,几乎是不可能的。因此诞生了FastCGI.
所以,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail-Over特性等等。
FastCGI:是一个可伸缩、高速的在web server和脚步语言间通讯的接口。其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。
2、FastCGI在web服务器(Nginx)中的工作原理。
(1)、web Sever 启动时载入FastCGI进程管理器,如php的FastCGI进程管理器是PHP-FPM(php-FastCGI Process Manger).
(2)、FastCGI进程管理器自身初始化,启动多个CGI解释器进程(在任务管理器中可见多个php-cgi.exe)并等待来自web服务器的连接。启动php-cgi FastCGI进程时,可以配置以TCP协议或socker两种方式启动。
(3)、当客户端请求到达Web Server时,Web Server将请求采用TCP协议或socket方式转发到FastCGI主进程,FastCGI主进程选择并连接到一个CGI解释器(子进程php-cgi.exe)。Web Server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi.exe.
(4)、FastCGI子进程php-cgi.exe完成处理后将标准输出和错误信息从原来的连接原路返回给web server。当FastCGI子进程关闭连接时,请求便处理完成。但是如果在传统的CGI接口中,此时php-cgi子进程便在此退出了。
下图所示的是Nginx+FastCGI的运作过程,脚本程序语言是php.
Alt text
3、FastCGI的优点
(1)、php脚本运行速度更快,php解释程序被载入内存而不是每次需要时从存储器读取,极大提升了依靠脚本运行站点的性能。
(2)、需要使用的系统资源更少,由于服务器不用每次在需要时都载入php解释程序,你可以将站点的传输速度提升很多而不必增加cpu负担。
(3)、可以把动态语言和HTTP服务器分离开来,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。多数流行的HTTP服务器都支持FastCGI包括Apache/Nginx/lighttpd等。
(4)、当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

用户对php动态网页的访问过程,以及nginx解析php步骤

用户浏览器发起对网页的访问:http://192.168.1.103/index.php
用户和nginx服务器进行三次握手进行TCP连接(还包括nginx访问控制策略、nginx防火墙等访问控制策略)
第一步:nginx接收到来自服务器的http请求。
第二步:nginx会根据用户访问的URL和后缀对请求进行判断。
(1)、例如客户端访问的index.php,nginx则会根据配置文件中的location进行匹配。
例如:

server {listen 8054;location ~ \.php$ {fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}   #error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root  html;}
}

用户访问的是index.php,则会匹配到location ~.php$,这个的含义是对用户通过url访问的资源进行区分大小的匹配,并且访问的资源是以.php结尾的。
这里的 fastcgi_pass 127.0.0.1:9000,表示nginx通过fastcgi的接口将http请求发给127.0.0.1:9000进行处理,这个过程就是上面fastcgi运行原理中的第三部。这里的php脚本解析服务和nginx放在同一个服务器上面。 这里我用的是php返回动态的资源,所以这里的FastCGI进程管理器用的是php-fpm。
(2)、fastcgi_pass将动态资源交给php-fpm后,php-fpm会讲资源转给php脚本解析服务器的wrapper.
(3)、wrapper收到php-fpm转过来的请求后,wrapper会生成一个新的线程调用php动态程序处理脚本并读取返回数据;比如读取mysql数据库,会触发读库操作。
(4)、php会将查询处理得到的结果返回给wrapper,一直返回到nginx。最后Nginx将返回的数据发送给客户端。
参考连接:
https://blog.csdn.net/m136663...
https://blog.csdn.net/riuhaze...
https://www.cnblogs.com/lidab...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_806222.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python虚拟环境的安装_Python虚拟环境,你有使用过吗?分分钟教你使用虚拟环境搭建一个小网站...

在开始之前,我们先做一点知识储备,从上图中,我们可以看到几个三个关键的信息:Python、virtualenv和Flask。 Python咱就不说了吧,简单、好入门、可以干好多事情。小到写脚本、大到做网站、数据分析等等。人生苦短&#…

如何找到网站服务器的源代码_如何找到一篇论文的源代码?

1. 如果这论文很老,论文里的算法在该领域有举足轻重的地位。那么网上很可能有工具包。例如我做的机器学习方向,经典的聚类、分类算法,MATLAB, python等常用语言都有丰富的工具包可供使用,一般有名的算法都会包括在其中。2. 如果论…

上传的文件在其他页面解析_渗透测试 对网站安全防护解析漏洞详情

天气逐渐变凉,但渗透测试的热情温度感觉不到凉,因为有我们的存在公开分享渗透实战经验过程,才会让这个秋冬变得不再冷,近期有反映在各个环境下的目录解析漏洞的检测方法,那么本节由我们高级渗透架构师来详细的讲解平常用到的web环境检测点和网站漏洞防护办法。3.14.…

如何在js中获取response.getwriter()的内容_常用的网站分析工具有哪些,网站流量质量如何分析?...

优化流量和改善页面不是网站分析师的直接工作,但一个优秀的网站分析师得有能力为产品和运营部门提供分析和建议,并在公司中形成数据氛围,保证各个部门向着同一个目标前进。毕竟,网站分析是一个发现问题、分析问题和解决问题的过程…

php网站 被 黑_为什么Swoole可以加速php

前言最近在研究Swoole,原来一直听别人在说Swoole可以加速,一直都是懵逼的。在研究了Swoole之后,我有了一些自己的理解。PHP-CGI 的黑历史对于 PHP 处理网络请求,大家基本上也都是在用 CGI 的方式来做的。那么,什么是 C…

m_Orchestrate learning system---网站的语言选择功能(中文英文)

m_Orchestrate learning system---网站的语言选择功能(中文英文) 一、总结 一句话总结:有两种方法,一是sessionjs端代码,而是sessionphp端代码。 推荐使用sessionphp端代码 用函数最方便,最简便&#xff0c…

微软正式发布Azure Storage上的静态网站

微软正式宣布了Azure Storage上的静态网站,提供了从托管在Azure Storage上的HTML、CSS和JavaScript文件提供内容的能力。静态网站包含内容固定的Web页面,同时仍然允许利用JavaScript等客户端代码来创建丰富的用户体验。 有了这个新功能,继用于…

千万级用户的大型网站,应该如何设计其高并发架构?

目录(1)单块架构(2)初步的高可用架构(3)千万级用户量的压力预估(4)服务器压力预估(5)业务垂直拆分(6)用分布式缓存抗下读请求&#xf…

大型网站技术架构(一)大型网站架构演化

2019独角兽企业重金招聘Python工程师标准>>> 看完了有一本书,就应该有所收获,有所总结,最近把《大型网站技术架构》一书给看完了,给人的印象实在深刻,再加上之前也搞过书本上讲的反向代理和负载均衡以及ses…

大型网站技术架构(二)架构模式

2019独角兽企业重金招聘Python工程师标准>>> 每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复工作。 所谓网站架构模式即为了解决大型网站面临的高并发访问、海量数据、高可靠…

大型网站技术架构(五)网站高可用架构

2019独角兽企业重金招聘Python工程师标准>>> 网站的可用性(Avaliability)描述网站可有效访问的特性。 1、网站可用性的度量与考核 网站不可用时间(故障时间)故障修复时间点-故障发现(报告)时间点…

是时候让你的网站用上HTML5

可能在几年之前,很多开发者对Html5只是有所耳闻,但是现在再看,各大厂商对于HTML5的支持不遗余力,包括在浏览器支持和技术内容分享的程度都狠下功夫,为了就是能够抢占HTML5的话语权。对于开发者而言,是时候让…

黑客组织 Anonymous 向色情网站创始人宣战

[导读]Anonymous是世界最大的黑客组织,曾经先后组织过针对Visa网站、万事达网站、索尼PlayStation在线网络等网络系统的攻击,并造成了被攻击方的严重损失。 北京时间12月9日消息,据国外媒体报道,著名黑客组织Anonymous日前正式同两…

中国盗版网站站长李翔在美被判入狱12年

【PConline 资讯】6月13日消息,中国盗版网站Crack99.com的站长李翔因非法出售多种盗版软件,于2011年6月被美国政府诱捕。近日,美国法院对李翔进行了宣判,宣判结果为判李翔入狱12年,在美服刑结束后,将李翔遣…

Hyper-V虚拟linux系统挂载windows宿主机共享文件夹实现网站数据备份的方法

最近在折腾软路由和虚拟机搭建网站,过程可参见笔者之前的几篇文章《Hyper-V安装lede软路由成功经历》、《Hyper-V安装centos系统搭建linux建站环境》,从而实现了在windows中通过Hyper-V搭建软路由和安装centos系统建站的目的。但我也一直在想&#xff0c…

Hyper-V安装centos系统搭建linux建站环境

Hyper-V安装centos系统搭建linux建站环境 前段时间写了篇文章《Hyper-V安装lede软路由历程及注意事项》介绍如何在windows10中通过Hyper-V虚拟机安装openwrt软路由以实现宿主机及与其连接的路由器、交换机下接设备联网功能。同时还写了《利用lnmp一键安装包配置自动更新的免费…

使用Vue仿一个网易云网站

使用Vue仿一个网易云网站小记预期进程记录12-0912-1412-1712-18源码组件分析ViewsSongsTopTitleCarouselPopMuiRecTitlePopRecMusicListMusicItemRecommendSingerRecommendSingerShowRecommendSingerListRecommendSingerItemSongListTargetSongShowSongListShowNewDiscNewDiscF…

一步一步SharePoint 2007之二十二:完美解决实现Form认证后无法再用SharePoint Designer编辑网站的问题...

摘要  前面的文章中,我们采用“曲线救国”的方式解决实现Form认证后无法再用SharePoint Designer编辑网站的问题,还甚至说Microsoft公司并未考虑这个问题。  这两天在国外的网上闲逛,偶然看到一篇关于这个问题文章,原来这个问…

用VSTS进行网站压力测试

VSTS提供了一个丰富、强大的工具平台,融合了软件开发领域的各个角色,涵盖软件开发生命周期的各个阶段,包括设计,开发,测试,管理,而这一整套构件的融会贯通,让它可以有效地改善软件开…