nginx和php之間工作原理

來源:互聯網
上載者:User
當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 = 2php-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一部分進程等待處理請求。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.