Nginx FastCGI的執行原理

2021-10-24 23:49:08 字數 3132 閱讀 3580

一、fastcgi

1、介紹

cgi全稱通用閘道器介面commmon gateway inte***ce

用於http服務上的程式服務通訊交流的一種工具,cgi程式須執行在網路伺服器上。

傳統cgi介面方式效能較差,由於每次http伺服器遇到動態程式需要重啟解析器來執行解析,然後結果被返回給http伺服器。這在處理高併發時,幾乎是不可能的,因此誕生了fastcgi。另外傳統的cgi介面方式安全性也很差

乙個可伸縮地。高速地在http伺服器和動態指令碼語言間通訊的介面

介面在linux下是socket(這個socket可以是檔案socket也可以是ip socket)

主要優點把動態語言和http伺服器分離開來。多數流行的http伺服器都支援fsatcgi包括apache/nginx/lighttpd等

支援語言比較流行的是php,介面方式採用c/s架構,可以將http伺服器和指令碼解析器分開,同時在指令碼解析伺服器上啟動乙個或者多個指令碼解析守護程序。

當http伺服器每次遇到動態程式時,可以將其直接交付給fastcgi程序來執行,然後將得到的結果返回給瀏覽器。這種方式可以讓http伺服器專一地處理靜態請求或者將動態指令碼伺服器的結果返回給客戶端,這在很大程度上提高了整個應用系統的效能。

2、配置檔案注釋

fastcgi_param script_filename$document_root$fastcgi_script_name; # 指令碼檔案請求的路徑

fastcgi_param request_method$request_method; # 請求的動作(get,post)

fastcgi_param content_type$content_type; # 請求頭中的content-type欄位

fastcgi_param content_length$content_length; # 請求頭中的content-length欄位。

fastcgi_param script_name$fastcgi_script_name; # 指令碼名稱

fastcgi_param request_uri$request_uri; # 請求的位址不帶引數

fastcgi_param document_uri$document_uri; # 與$uri相同。

fastcgi_param document_root$document_root; # **的根目錄。在server配置中root指令中指定的值

fastcgi_param server_protocol$server_protocol; # 請求使用的協議,通常是http/1.0或http/1.1。

fastcgi_param gateway_inte***ce cgi/1.1; # cgi版本

fastcgi_param server_software nginx/$nginx_version; # nginx版本號,可修改、隱藏

fastcgi_param remote_addr$remote_addr; # 客戶端ip

fastcgi_param remote_port$remote_port; # 客戶端埠

fastcgi_param server_addr$server_addr; # 伺服器ip位址

fastcgi_param server_port$server_port; # 伺服器端口

fastcgi_param server_name$server_name;#伺服器名,網域名稱在server配置中指定的server_name

# fastcgi_param path_info$path_info;#可自定義變數

# php only,required if php was builtwith--enable-force-cgi-redirect

# fastcgi_param redirect_status 200;

在php可列印出上面的服務環境變數

如:echo $_server['remote_addr']

3、fastcgi的重要特點總結:

1)是http伺服器和動態指令碼語言間通訊的介面或者工具!

2)優點就是把動態語言解析和http伺服器分離了開來!

3)nginx、apache、lighttpd以及多數動態語言都支援fastcgi。

4)介面方式採用c/s結構,分為http伺服器(客戶端)和動態語言解析伺服器(服務端)

5)php動態語言服務端可以啟動多個fastcgi的守護程序例如:php-fpm(fcgi process mangemnt)

6)http伺服器通過例(nginx fastgi_pass)fastcgi客戶端和動態語言fastcgi服務端通訊(例如:php-fpm)

二、nginx fastcgi的執行原理

nginx fastcgi訪問php

1、使用者傳送http請求報文給nginx伺服器

2、nginx會根據檔案url和字尾來判斷請求

3、如果請求的是靜態內容,nginx會將結果直接返回給使用者

4、如果請求的是動態內容,nginx會將請求交給fastcgi客戶端,通過fastcgi_pass將這個請求傳送給php-fpm

7、如果使用者請求的是博文、或者內容、php會請求mysql查詢結果

9、php會將查詢到的結果交給nginx

10、nginx會生成乙個響應報文返還給使用者

知識補充:

網路上的兩個程式通過乙個雙向的通訊連線實現資料的交換,這個連線的一端稱為乙個socket。

socket的英文原義是「孔」或「插座」。作為bsdunix的程序通訊機制,取後一種意思。通常也稱作"套接字",用於描述ip位址和埠,是乙個通訊鏈的控制代碼,可以用來實現不同虛擬機器或不同計算機之間的通訊。在internet上的主機一般執行了多個服務軟體,同時提供幾種服務。每種服務都開啟乙個socket,並繫結到乙個埠上,不同的埠對應於不同的服務。socket正如其英文原意那樣,像乙個多孔插座。一台主機猶如布滿各種插座的房間,每個插座有乙個編號,有的插座提供220伏交流電,有的提供110伏交流電,有的則提供有線電視節目。客戶軟體將插頭插到不同編號的插座,就可以得到不同的服務。

nginx fast cgi 一些小結

fpm children make line 352 child 20477 pool default started fpm event loop line 105 libevent entering main loop 的解決方案 這個問題是系統最大開啟檔案數與php fpm設定不一樣所致 1....

大資料執行環境的執行

1.azkaban 啟動 bin azkaban solo start.sh或絕對路徑方式執行azkaban solo start.sh指令碼 關閉 bin azkaban solo shutdown.sh 2.kafka 注意配置server.properties,此配置檔案用來配置kafka伺服...

編譯執行和解析執行的區別以及執行的速度比較?

解釋執行 由直譯器根據輸入的資料當場執行而不生成任何的目標程式.解釋執行,它解釋一句就執行一句,不形成目標程式,輸入一條命令語句,解釋程式就立即將此語句解釋成一條或幾條指令並提交硬體立即執行且將執行結果反映到終端,就能立即得到計算結果。但解釋程式執行速度很慢,例如源程式中出現迴圈,則解釋程式也重複地...