在服務器上,當咱們查看php進程時,全都是php-fpm進程,你們都知道這個就是php的運行環境,那麼,它究竟是個什麼東西呢?php
PHP-FPM,就是PHP的FastCGI管理器,用於替換PHP FastCGI的大部分附加功能,在PHP5.3.3後已經成爲了PHP的標配。html
有小夥伴要問了,FastCGI又是什麼鬼?CGI程序又叫作「通用網關接口」,就是讓Web服務器和你的應用程序進行交互的一個接口。就像nginx中須要配置的fastcgi_pass,通常咱們會使用127.0.0.1:9000或者unix:/tmp/php-cgi.sock來配置這個參數。它的意思就是告訴nginx,過來的請求使用tcp:9000端口的監聽程序來處理或者使用unix/socket來處理。它們都是指向的PHP運行程序。python
再說得通俗一點,咱們運行php腳本用的是nginx
php aaa.php
php-fpm就至關因而這個php命令。nginx經過fastcgi_pass來運行php $nginx_root(nginx配置文件中網站根目錄root配置)下的index.php。因此,若是你用的是python或者其餘什麼語言,均可以用它們的cgi程序來讓nginx調用。緩存
FastCGI和CGI又有什麼不一樣呢?FastCGI是啓動一個socket接口,服務器應用不須要本身去運行php,只須要向這個socket接口提交請求就能夠了。服務器
php-fpm在編譯php時須要添加--enable-fpm。一些通用的集成安裝包如lnmp、phpStudy等都會默認編譯並使用php-fpm,畢竟是標配。網絡
上文中說過nginx可使用127.0.0.1:9000和unix:/tmp/php-cgi.sock這兩種方式來調用php-fpm。它們有什麼區別呢?socket
前者,通常帶9000端口號的,是tcp形式的調用。也就是php-fpm啓動了一個監聽進程對9000端口進行監聽。它會調起一個tcp/ip服務,nginx在調用的時候會走一次tcp請求流程,也就是3次握手4次揮手,會走到網絡七層中的第四層傳輸層。相對來講這種方式性能會稍差一點,啓動php-fpm後使用nestat查看端口中會出現9000端口的佔用。tcp
後者,使用的是unix套接字socket服務,經過sock文件來交換信息,性能相對好一些,由於它沒有tcp鏈接過程,也不會有9000端口的佔用。php-fpm
對於高負載大訪問量的網站仍是推薦使用unix方式,對於普通小網站來講,無所謂使用哪一個均可以,tcp方式反而更容易配置和理解,也是php-fpm.conf中默認的監聽方式。
php-fpm.conf配置中的listen屬性用來配置監聽,這裏的配置要和nginx中的一致,使用tcp的就監聽127.0.0.1:9000,使用unix的就設置成/tmp/php-cgi-56.sock。
如下內容摘自官方文檔:
本文參考: