nginx和php之間運作原理

小云云
發布: 2023-03-20 15:50:01
原創
3003 人瀏覽過

當nginx接收到一個http請求時,透過設定檔找到對應的server。然後匹配server中的所有location,找到最匹配的。而在location中的指令會啟動不同的模組去完成工作,例如rewrite模組、index模組。因此在nginx中模組可以看作真正的勞動工作者。 nginx的模組是被編譯到nginx中的,屬於靜態方式。啟動nginx時,模組會自動載入。不像apache,把模組單獨編譯成so文件,在設定檔中指定是否載入。所以,單比模組載入方面,nginx也比apache速度有提升。

那nginx是怎麼呼叫php的呢?先看下面的nginx中關於php的設定

location ~ \.php$ {
            root           /webpath;
            fastcgi_pass   127.0.0.1:9000;
            …
            ...
        }
登入後複製

這個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中可以看到如下:

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子程序關閉連線時,請求便告處理完成,等待下次處理。

普通的cgi模式是進程但存在一個問題每來一個請求就必須fork一個進程導致效率緩慢

所以才有了fast cgi fpm就是fast cgi manager 
fpm的模式也是行程但他會prefork 就是服務啟動的時候先fork一部分行程等待處理請求。

相關推薦:

Nginx和PHP-FPM的啟動、重新啟動、停止腳本

設定nginx和PHP上傳檔案大小限制

mac下方安裝nginx與php_PHP教學

#

以上是nginx和php之間運作原理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!