Inhaltsverzeichnis
Web服务器和动态语言如何交互--CGI&FastCGI&FPM浅谈,web服务器交互--cgi
Heim php教程 php手册 Web服务器和动态语言如何交互--CGI&FastCGI&FPM浅谈,web服务器交互--cgi

Web服务器和动态语言如何交互--CGI&FastCGI&FPM浅谈,web服务器交互--cgi

Jun 13, 2016 am 09:14 AM
amp fastcgi fpm web 交互 动态 如何 服务器 语言

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

 

首先要添加fastcgi模块到httpd.conf配置文件:

LoadModule fastcgi_module modules/mod_fastcgi.so

这种模式注释不注释LoadModule php5_module modules/libphp5.so这行貌似没什么关系,只要配置了以下模块


   FastCgiServer /home/weiyanyan/local/apache/cgi-bin/php-cgi -processes 20
   AddType application/x-httpd-php .php

   AddHandler php-fastcgi .php

   Action php-fastcgi /cgi-bin/php-cgi

就会自动走到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/

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Konvertieren Sie die Festplatte von VirtualBox in eine dynamische Festplatte und umgekehrt Konvertieren Sie die Festplatte von VirtualBox in eine dynamische Festplatte und umgekehrt Mar 25, 2024 am 09:36 AM

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

So konfigurieren Sie Dnsmasq als DHCP-Relay-Server So konfigurieren Sie Dnsmasq als DHCP-Relay-Server Mar 21, 2024 am 08:50 AM

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

Best-Practice-Leitfaden zum Erstellen von IP-Proxyservern mit PHP Best-Practice-Leitfaden zum Erstellen von IP-Proxyservern mit PHP Mar 11, 2024 am 08:36 AM

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? Lösung, warum Epic das Spiel nicht offline betreten kann Was soll ich tun, wenn ich das Spiel nicht betreten kann, während der Epic-Server offline ist? Lösung, warum Epic das Spiel nicht offline betreten kann Mar 13, 2024 pm 04:40 PM

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 PHP-FFmpeg-Erweiterung auf dem Server? Wie installiere ich die PHP-FFmpeg-Erweiterung auf dem Server? Mar 28, 2024 pm 02:39 PM

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

Erkundung der Grenzen von Agenten: AgentQuest, ein modulares Benchmark-Framework zur umfassenden Messung und Verbesserung der Leistung großer Sprachmodellagenten Erkundung der Grenzen von Agenten: AgentQuest, ein modulares Benchmark-Framework zur umfassenden Messung und Verbesserung der Leistung großer Sprachmodellagenten Apr 11, 2024 pm 08:52 PM

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

So ändern Sie die Sprachanzeige der vivox60pro-Vivox60pro-System-Spracheinstellungsmethode So ändern Sie die Sprachanzeige der vivox60pro-Vivox60pro-System-Spracheinstellungsmethode Mar 23, 2024 am 09:06 AM

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.

Ausführliche Erläuterung der Vorteile und des Nutzens des Golang-Servers Ausführliche Erläuterung der Vorteile und des Nutzens des Golang-Servers Mar 20, 2024 pm 01:51 PM

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

See all articles