Web服务器和动态语言如何交互--CGI&FastCGI&FPM浅谈,web服务器交互--cgi
Web服务器和动态语言如何交互--CGI&FastCGI&FPM浅谈,web服务器交互--cgi
一个用户的Request是如何经过Web服务器(Apache,Nginx,IIS,Light)与后端的动态语言(如PHP等)进行交互并将结果返回给用户的呢?
本文浅谈个人观点,可能有误,欢迎拍砖,共同学习。
一. 首先明确几个概念,以便后续说明
CGI:(Common Gateway Interface)Http服务器与后端程序(如PHP)进行交互的中间层。
工作原理及处理方式(fork-and-execute模式):
1.当Web Server有Request到达
2.fork一个CGI进程或线程(配置管理,环境初始化)
3.执行后台脚本
4.将结果返回Web服务器。
5.Web服务器将结果返回给用户。
FastCGI:常驻型(long-live)CGI形式,经过激活后,不会每次都要花时间去fork。
工作原理及处理方式:
1.Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)
2.FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi进程),并等待来自Web Server的连接
3.当有客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器;Web Server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
4.FastCGI子进程完成处理后将标准输出和错误信息返回Web Server。当FastCGI子进程关闭连接时,请求便告知处理完成。子进程继续响应来自FastCGI进程管理器分配的其他请求。
PHP-FPM:只用于PHP的PHP FastCGI 进程管理器。
PHP5.3.3以后的版本已经集成了PHP-FPM了。
php-fpm提供了更好的PHP配置管理方式,可以有效控制内存和进程、可以平滑重载php配置。
./configure php源码的时候,加—enable-fpm参数可开启PHP_FMP。
Spawn-FCGI:一个普通的FastCGI进程管理器。
二. PHP中的CGI实现:
PHP的CGI实现本质上是以Socket编程实现一个TCP或者UDP协议服务器。当启动时, 创建TCP/UDP协议的服务器监听,并接受相关请求进行处理。
CGI的生命周期为:模块初始化;SAPI初始化;请求的处理;模块关闭;SAPI关闭;
以TCP协议为例,在TCP的服务端,会执行如下操作:
1.服务端调用Socket函数创建一个TCP用的流式套接字;
2.服务端调用bind函数将服务器的本地地址与前面创建的套接字绑定;
3.服务调用listen函数将新创建的套接字作为监听,等待客户端发起连接,当客户端有多个连接连接到这个套接字时,可能需要排队处理;
4.服务器调用accept函数进入阻塞状态,直到有客户进程调用connect函数而建立起一个连接;
5.当与客户端创建连接后,服务器调用read_stream函数读取客户的请求;
6.处理完数据后,服务器调用write函数向客户端发送应答。
三.目前PHP的工作方式(以Apache服务器为例,因为Apache和Php是好兄弟嘛)
1.Apache Handler方式(php作为Apache服务器的Module)
一种改进的CGI方式,把PHP的解释模块编成so扩展,添加到Apache的modules中。
配置方式:
<p>1.编译PHP时,加上如下参数:</p> <p>cd php-source</p> <p>./configure --prefix=/home/weiyanyan/local/php --with-apxs2=/home/weiyanyan/local/apache/bin/apxs --with-mysql</p> <p>说明:—with-apxs2为apache中apxs相应目录,将在apache根目录下的modules下生成libphp5.so</p> <p>2.在apache的配置文件http.conf中增加 <p>LoadModule php5_module modules/libphp5.so <p>然后在<IfModule mime_module>节点下增加如下mime配置 <p>AddType application/x-httpd-php .php<br> </p>
2.CGI模式
前提为不能以模块模式运行。(注释掉:LoadModule php5_module modules/libphp5.so)
在httpd.conf增加action:
Action application/x-httpd-php /cgi-bin/php-cgi
如果在/cgi目录找不到php-cgi,可从php的bin里面cp一个。
【可以写一个PHP脚本,让其sleep(20);运行之前看机器进程中无php-cgi进程,请求的时候,会有相应的进程产生。经测试一个php-cgi进程可以承载多个请求,具体未深究,因为这种方式已经基本没有人用了。】
3.FastCGI模式
FastCGI模式根据进程管理器的不同可以分为:Apache内置进程管理器,php-fpm进程管理器
Apache内置进程管理器:
<p>mod_fastcgi的安装 <p>#wget http://www.fastcgi.com/dist/mod_fastcgi-2.4.6.tar.gz <p># tar -zxvf mod_fastcgi-2.4.6.tar.gz <p># cd mod_fastcgi-2.4.6 <p># cp Makefile.AP2 Makefile <p># vim Makefile 将Makefile中的路径改成你的apache的安装路径 <p># make install 安装成功 <p>安装成功后,会自动把mod_fastcgi.so复制到/usr/local/apache/modules目录 </p>
首先要添加fastcgi模块到httpd.conf配置文件:
LoadModule fastcgi_module modules/mod_fastcgi.so
这种模式注释不注释LoadModule php5_module modules/libphp5.so这行貌似没什么关系,只要配置了以下模块
AddHandler php-fastcgi .php Action php-fastcgi /cgi-bin/php-cgi
FastCgiServer /home/weiyanyan/local/apache/cgi-bin/php-cgi -processes 20
AddType application/x-httpd-php .php
就会自动走到fastcgi模式。
然后重启apache,这个时候用 ps aux|grep php就会发现有很多php-cgi进程在运行。说明配置生效.
FPM方式
首先要添加fastcgi模块到httpd.conf配置文件:
LoadModule fastcgi_module modules/mod_fastcgi.so
这种模式注释不注释LoadModule php5_module modules/libphp5.so这行貌似没什么关系,只要配置了以下模块
FastCgiExternalServer /home/weiyanyan/local/apache/cgi-bin/php-cgi -host 127.0.0.1:9000
AddType application/x-httpd-php .php
AddHandler php-fastcgi .php
Action php-fastcgi /cgi-bin/php-cgi
其中在本机9000端口开启了PHP-Fpm服务
FPM的安装简单介绍如下:
cd php-source
./configure --prefix=/home/weiyanyan/local/php --with-apxs2=/home/weiyanyan/local/apache/bin/apxs --with-mysql --enable-fpm
此时在Php的根目录sbin下会有php-fpm运行程序,其配置文件在php根目录下面的/etc/php-fpm.conf
修改完配置,在apache配置对应的端口启动php-fpm即可。
[只是写完,未检查,回家过年…]
参考:
http://www.phppan.com/2011/05/php-cgi/
http://www.cnblogs.com/fangbo/archive/2011/12/02/2272400.html
http://blog.zyan.cc/nginx_php_v6/

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Beim Erstellen einer virtuellen Maschine werden Sie aufgefordert, einen Festplattentyp auszuwählen. Sie können zwischen einer festen Festplatte und einer dynamischen Festplatte wählen. Was ist, wenn Sie sich für Festplatten entscheiden und später feststellen, dass Sie dynamische Festplatten benötigen, oder umgekehrt? Sie können die eine in die andere konvertieren. In diesem Beitrag erfahren Sie, wie Sie eine VirtualBox-Festplatte in eine dynamische Festplatte umwandeln und umgekehrt. Eine dynamische Festplatte ist eine virtuelle Festplatte, die zunächst klein ist und mit der Speicherung von Daten in der virtuellen Maschine immer größer wird. Dynamische Festplatten sparen sehr effizient Speicherplatz, da sie nur so viel Host-Speicherplatz beanspruchen, wie benötigt wird. Wenn jedoch die Festplattenkapazität zunimmt, kann die Leistung Ihres Computers geringfügig beeinträchtigt werden. In virtuellen Maschinen werden häufig Festplatten und dynamische Festplatten verwendet

Die Rolle eines DHCP-Relays besteht darin, empfangene DHCP-Pakete an einen anderen DHCP-Server im Netzwerk weiterzuleiten, auch wenn sich die beiden Server in unterschiedlichen Subnetzen befinden. Durch die Verwendung eines DHCP-Relays können Sie einen zentralen DHCP-Server im Netzwerkzentrum bereitstellen und ihn verwenden, um allen Netzwerksubnetzen/VLANs dynamisch IP-Adressen zuzuweisen. Dnsmasq ist ein häufig verwendeter DNS- und DHCP-Protokollserver, der als DHCP-Relay-Server konfiguriert werden kann, um die Verwaltung dynamischer Hostkonfigurationen im Netzwerk zu unterstützen. In diesem Artikel zeigen wir Ihnen, wie Sie dnsmasq als DHCP-Relay-Server konfigurieren. Inhaltsthemen: Netzwerktopologie Konfigurieren statischer IP-Adressen auf einem DHCP-Relay D auf einem zentralen DHCP-Server

Bei der Netzwerkdatenübertragung spielen IP-Proxyserver eine wichtige Rolle. Sie helfen Benutzern dabei, ihre echten IP-Adressen zu verbergen, ihre Privatsphäre zu schützen und die Zugriffsgeschwindigkeit zu verbessern. In diesem Artikel stellen wir den Best-Practice-Leitfaden zum Aufbau eines IP-Proxyservers mit PHP vor und stellen spezifische Codebeispiele bereit. Was ist ein IP-Proxyserver? Ein IP-Proxyserver ist ein Zwischenserver zwischen dem Benutzer und dem Zielserver. Er fungiert als Übertragungsstation zwischen dem Benutzer und dem Zielserver und leitet die Anforderungen und Antworten des Benutzers weiter. Durch die Verwendung eines IP-Proxyservers

Was soll ich tun, wenn ich das Spiel nicht betreten kann, während der Epic-Server offline ist? Dieses Problem muss bei vielen Freunden aufgetreten sein. Wenn diese Meldung angezeigt wird, kann das Problem normalerweise durch Störungen durch das Netzwerk und die Sicherheitssoftware verursacht werden Ich möchte die Lösung mit Ihnen teilen und hoffe, dass das heutige Software-Tutorial Ihnen bei der Lösung des Problems helfen kann. Was ist zu tun, wenn der Epic-Server nicht auf das Spiel zugreifen kann, wenn er offline ist: 1. Möglicherweise wird er durch Sicherheitssoftware gestört. Schließen Sie die Spielplattform und die Sicherheitssoftware und starten Sie sie dann neu. 2. Der zweite Grund ist, dass das Netzwerk zu stark schwankt. Versuchen Sie, den Router neu zu starten, um zu sehen, ob er funktioniert. Wenn die Bedingungen in Ordnung sind, können Sie versuchen, das 5g-Mobilfunknetz für den Betrieb zu verwenden. 3. Dann könnten es noch mehr sein

Wie installiere ich die PHPFFmpeg-Erweiterung auf dem Server? Die Installation der PHPFFmpeg-Erweiterung auf dem Server kann uns dabei helfen, Audio- und Videodateien in PHP-Projekten zu verarbeiten und Funktionen wie Kodierung, Dekodierung, Bearbeitung und Verarbeitung von Audio- und Videodateien zu implementieren. In diesem Artikel erfahren Sie, wie Sie die PHPFFmpeg-Erweiterung auf dem Server installieren, sowie spezifische Codebeispiele. Zunächst müssen wir sicherstellen, dass PHP und FFmpeg auf dem Server installiert sind. Wenn FFmpeg nicht installiert ist, können Sie die folgenden Schritte ausführen, um FFmpe zu installieren

Basierend auf der kontinuierlichen Optimierung großer Modelle haben LLM-Agenten – diese leistungsstarken algorithmischen Einheiten – das Potenzial gezeigt, komplexe mehrstufige Argumentationsaufgaben zu lösen. Von der Verarbeitung natürlicher Sprache bis hin zum Deep Learning rücken LLM-Agenten nach und nach in den Fokus von Forschung und Industrie. Sie können nicht nur menschliche Sprache verstehen und generieren, sondern auch Strategien formulieren, Aufgaben in verschiedenen Umgebungen ausführen und sogar API-Aufrufe und Codierung zum Erstellen verwenden Lösungen. In diesem Zusammenhang ist die Einführung des AgentQuest-Frameworks ein Meilenstein. Es bietet nicht nur eine modulare Benchmarking-Plattform für die Bewertung und Weiterentwicklung von LLM-Agenten, sondern bietet Forschern auch leistungsstarke Tools, um die Leistung dieser Agenten gleichzeitig zu verfolgen und zu verbessern granularerer Ebene

1. Klicken Sie im Telefoneinstellungsmenü auf [Systemverwaltung]. 2. Klicken Sie auf die Option [Sprache]. 3. Wählen Sie die Systemsprache aus, die Sie verwenden möchten.

Golang ist eine von Google entwickelte Open-Source-Programmiersprache. Sie ist effizient, schnell und leistungsstark und wird häufig in den Bereichen Cloud Computing, Netzwerkprogrammierung, Big-Data-Verarbeitung und anderen Bereichen eingesetzt. Als stark typisierte, statische Sprache bietet Golang viele Vorteile beim Erstellen serverseitiger Anwendungen. In diesem Artikel werden die Vorteile und der Nutzen des Golang-Servers im Detail analysiert und seine Leistungsfähigkeit anhand spezifischer Codebeispiele veranschaulicht. 1. Der leistungsstarke Golang-Compiler kann den Code in lokalen Code kompilieren
