fastcgi原理
fastcgi是乙個運用於http server和動態指令碼語言間通訊的介面,多數流行的http server都支援fastcgi,包括apache、nginx和lighttpd等。同時,fastcgi也被許多指令碼語言支援,其中就有php。
fastcgi介面方式採用c/s結構,可以將http伺服器和指令碼解析伺服器分開,同時在指令碼解析伺服器上啟動乙個或者多個指令碼解析守護程序。當http伺服器每次遇到動態程式時,可以將其直接交付給fastcgi程序來執行,然後將得到的結果返回給客戶端。這種方式可以讓http伺服器專一地處理靜態請求或者將動態指令碼伺服器的結果返回給客戶端,這在很大程度上提高了整個應用系統的效能。
nginx+php-fpm實現原理
nginx本身不會對php進行解析,終端對php頁面的請求將會被nginx交給fastcgi程序監聽的ip位址及埠,由php-fpm作為動態解析伺服器處理,最後將處理結果再返回給nginx。其實,nginx就是乙個反向**伺服器。nginx通過反向**功能將動態請求轉向後端php-fpm,從而實現對php的解析支援,這就是nginx實現php動態解析的原理。
nginx 簡單配置
location ~ \.php$
當nginx接收到乙個http請求時,通過配置檔案找到對應的server。然後匹配server中的所有location,找到最匹配的。而在location中的命令會啟動不同的模組去完成工作,比如rewrite模組、index模組。因此在nginx中模組可以看作真正的勞動工作者。nginx的模組是被編譯到nginx中的,屬於靜態方式。啟動nginx時,模組被自動載入。不像apache,把模組單獨編譯成so檔案,在配置檔案中指定是否載入。所以,單比模組載入方面,nginx也比apache速度上有提公升。
那nginx是怎麼呼叫php的呢?先看下面的nginx中關於php的配置
something
shell
location ~ \.php$
這個location指令把以php為檔案字尾的請求,交給127.0.0.1:9000處理。我想你看到這個應該猜到了,這是乙個c/s架構東西。 而這裡的ip位址和埠(127.0.0.1:9000)就是fastcgi程序監聽的ip位址和埠。fastcgi是乙個可伸縮地、高速地在http server和動態指令碼語言間通訊的介面。多數流行的http server都支援fastcgi,包括apache、nginx和lighttpd等。同時,fastcgi也被許多指令碼語言支援,其中就有php。
那這個fastcgi的配置ip和埠從何而來呢?在php-fpm.conf中可以看到如下:
something
shell
listen = 127.0.0.1:9000 #這個表示php的fastcgi程序監聽的ip位址以及埠
pm.start_servers = 2
php-fpm作為fastcgi的程序管理器,可以有效控制記憶體和程序,並且平滑過載php配置。php5.3以後,php-fpm被整合到php的core中,預設安裝,無須配置。
fastcgi程序管理器php-fpm自身初始化,啟動主程序php-fpm和啟動start_servers個fastcgi子程序。主程序php-fpm主要是管理fastcgi子程序,監聽9000埠,fastcgi子程序等待請求。當客戶端請求到達nginx時,nginx通過location指令,將所有以php為字尾的檔案都交給 127.0.0.1:9000 來處理。php-fpm選擇並連線到乙個fastcgi子程序,並將環境變數和標準輸入傳送到fastcgi子程序。fastcgi子程序完成處理後將標準輸出和錯誤資訊返回。當fastcgi子程序關閉連線時,請求便告處理完成,等待下次處理。
參考:
H5 WebSocket 如何和C 進行通訊
html5作為下一代的 web 標準,擁有許多引人注目的新特性,如 canvas 本地儲存 多 程式設計介面 websocket 等。websocket 在瀏覽器和伺服器之間提供了乙個基於 tcp 連線的雙向通道。web 開發人員可以非常方便地使用 websocket 構建實時 web 應用。htm...
php注釋前面 PHP如何進行注釋
在 中進行注釋是很有必要的,規範的注釋使的源 更易於人類理解,可以幫助我們理解別人或者自己以前編寫的 那麼如何進行 注釋?本篇文章就來給大家介紹在php中進行注釋的幾種方法,希望對大家有所幫助。在php中可以進行兩種型別的注釋 單行注釋 每行必須單獨使用注釋標記,稱為單行注釋。它用於進行簡短說明。單...
PHP如何與JS進行互動?
今天又突然發現了乙個技巧,就是php可以傳值給js,如何做呢?原來php的原理是這樣的 php的所有應用程式都是通過web伺服器 如iis或apache 和php引擎程式解釋執行完成的,工作過程 1 當使用者在瀏覽器位址中輸入要訪問的php頁面檔名,然後回車就會觸發這個php請求,並將請求傳送化支援...