在伺服器上,當我們檢視php程序時,全都是php-fpm程序,大家都知道這個就是php的執行環境,那麼,它到底是個什麼東西呢?
php-fpm,就是php的fastcgi管理器,用於替換php fastcgi的大部分附加功能,在php5.3.3後已經成為了php的標配。
有小夥伴要問了,fastcgi又是什麼鬼?cgi程式又叫做「通用閘道器介面」,就是讓web伺服器和你的應用程式進行互動的乙個介面。就像nginx中需要配置的fastcgi_pass,一般我們會使用127.0.0.1:9000或者unix:/tmp/php-cgi.sock來配置這個引數。它的意思就是告訴nginx,過來的請求使用tcp:9000埠的監聽程式來處理或者使用unix/socket來處理。它們都是指向的php執行程式。
再說得通俗一點,我們執行php指令碼用的是
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。它們有什麼區別呢?
前者,一般帶9000埠號的,是tcp形式的呼叫。也就是php-fpm啟動了乙個監聽程序對9000埠進行監聽。它會調起乙個tcp/ip服務,nginx在呼叫的時候會走一次tcp請求流程,也就是3次握手4次揮手,會走到網路七層中的第四層傳輸層。相對來說這種方式效能會稍差一點,啟動php-fpm後使用nestat檢視埠中會出現9000埠的占用。
後者,使用的是unix套接字socket服務,通過sock檔案來交換資訊,效能相對好一些,因為它沒有tcp連線過程,也不會有9000埠的占用。
php-fpm.conf配置中的listen屬性用來配置監聽,這裡的配置要和nginx中的一致,使用tcp的就監聽127.0.0.1:9000,使用unix的就設定成/tmp/php-cgi-56.sock。
以下內容摘自官方文件:
本文參考:fastcgi 程序管理器(fpm)www.php.net
php-fpm使用unix socket方式www.jianshu.com
csdn-專業it技術社群-登入blog.csdn.net
php獲得客戶端ip
在php 中使用 server remote addr 來取得客戶端的 ip 位址,但如果客戶端是使用 伺服器來訪問,那取到的就是 伺服器的 ip 位址,而不是真正的客戶端 ip 位址。要想透過 伺服器取得客戶端的真實 ip 位址,就要使用 server http x forwarded for 來...
PHP獲取客戶端IP
在php獲取客戶端ip中常使用 server remote addr 但如果客戶端是使用 伺服器來訪問,那取到的是 伺服器的 ip 位址,而不是真正的客戶端 ip 位址。要想透過 伺服器取得客戶端的真實 ip 位址,就要使用 server http x forwarded for 來讀取。但只有客戶...
PHP獲取客戶端IP
在這篇文章中,我們將會為大家詳細介紹php獲取客戶端ip的幾種情況分析。我們在使用php獲取的ip可能是客戶端真實的ip,也可能是 伺服器的ip,也有可能根本取不到任何ip值。在php獲取客戶端ip中常使用 server remote addr 但如果客戶端是使用 伺服器來訪問,那取到的是 伺服器的...