日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Nginx >内容正文

Nginx

Nginx FastCGI的运行原理

發布時間:2025/1/21 Nginx 103 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Nginx FastCGI的运行原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、FastCGI

1.介紹

CGI全稱通用網關接口 Commmon Gateway Interface

用于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. 配置文件注釋

vim /application/nginx/conf/fastcgi.conf

fastcgi_param? SCRIPT_FILENAME??? $document_root$fastcgi_script_name;#腳本文件請求的路徑

fastcgi_param? QUERY_STRING?????? $query_string; #請求的參數;如?app=123

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_INTERFACE? 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 不支持對外部動態程序的直接調用或者解析 ,所有的外部程序(包括PHP)必須通過FastCGI接口來調用。FastCGI接口在linux下是socket,(這個socket可以是文件socket,也可以是IP? socket)。為了調用CGI程序,還需要wrapper綁定在某個固定socket上,如端口或者文件socket。當Nginx將CGI請求發送給這個socket的時候,通過FastCGI接口,warpper接収到請求,然后派出一個新的線程,這個線程調用解釋器或者外部程序處理腳本并讀取返回數據,接著,wrapper再將返回的數據通過FastCGI接口,沿著固定socket傳遞給Nginx;最后,nginx將返回的數據發送給客戶端,這就是Nginx+fastcgi的整個運行過程。

? ? ?

nginx fastcgi訪問php

1、用戶發送http請求報文給nginx服務器

2、nginx會根據文件url和后綴來判斷請求

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

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

5、php-fpm會將請求交給wrapper

6、wrapper收到請求會生成新的線程調用php動態程序解析服務器

7、如果用戶請求的是博文、或者內容、PHP會請求MySQL查詢結果

8、如果用戶請求的是圖片、附件、PHP會請求nfs存儲查詢結果

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

10、nginx會生成一個響應報文返還給用戶

?

知識補充:

網絡上的兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的一端稱為一個socket

Socket的英文原義是插座。作為BSDUNIX進程通信機制,取后一種意思。通常也稱作"套接字",用于描述IP地址和端口,是一個通信鏈的句柄,可以用來實現不同虛擬機或不同計算機之間的通信。在Internet上的主機一般運行了多個服務軟件,同時提供幾種服務。每種服務都打開一個Socket,并綁定到一個端口上,不同的端口對應于不同的服務。Socket正如其英文原意那樣,像一個多孔插座。一臺主機猶如布滿各種插座的房間,每個插座有一個編號,有的插座提供220伏交流電,有的提供110伏交流電,有的則提供有線電視節目??蛻糗浖⒉孱^插到不同編號的插座,就可以得到不同的服務。

?

本文出自 “追夢IT男” 博客,請務必保留此出處http://runningyongboy.blog.51cto.com/8234857/1722299

轉載于:https://www.cnblogs.com/wajika/p/6395603.html

總結

以上是生活随笔為你收集整理的Nginx FastCGI的运行原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。