nginx +php-fpm 發揮更大的php做用

簡介 編輯

PHP-FPM(FastCGI Process Manager:FastCGI進程管理器)對於PHP 5.3.3以前的php來講,是一個補丁包 [1]   ,旨在將FastCGI進程管理整合進PHP包中。若是你使用的是PHP5.3.3以前的PHP的話,就必須將它patch到你的PHP源代碼中,在編譯安裝PHP後纔可使用。
從PHP 5.4 RC2開始,php-fpm已經轉正了,再也不被php團隊標註爲 EXPERIMENTAL(實驗性的東西) [2-3]   。
相對Spawn-FCGI,PHP-FPM在CPU和內存方面的控制都更勝一籌,並且前者很容易崩潰,必須用crontab進行監控,而PHP-FPM則沒有這種煩惱。
PHP5.3.3已經集成php-fpm了,再也不是第三方的包了。PHP-FPM提供了更好的PHP 進程管理方式,能夠有效控制內存和進程、能夠平滑 重載PHP配置,比spawn-fcgi具備更多優勢,因此被PHP官方收錄了。在./configure的時候帶 –enable-fpm參數便可開啓PHP-FPM。
使用PHP-FPM來控制PHP-CGI的FastCGI進程
/usr/local/ php/sbin/php-fpm{start|stop|quit|restart|reload| logrotate}
--start 啓動php的 fastcgi進程
--stop 強制終止php的fastcgi進程
--quit 平滑終止php的fastcgi進程
--restart 重啓 php的fastcgi進程
--reload 從新平滑加載php的php.ini
--logrotate 從新啓用log文件

特點功能 編輯

全部這些特性都是「不打斷」的方式實現的。也就是說,若是你不使用它們,它們的存在不會影響 php的功能性——他們都是「透明」的。
Error header
範圍:php.ini 選項
分類:便利性
默認狀況下,若是被訪問的php腳本包含語法錯誤,用戶會收到一個空的「200 ok」頁。這是不方便的。Error header 這個php.ini 選項容許在這種狀況下產生一個 HTTP 錯誤碼,好比「HTTP/1.0 550 Server Made Big Boo」,從而中斷web server請求並顯示一個正確的錯誤頁。
若是要實現這樣的功能,須要在 php.ini 中添加一條 fastcgi.error_header = "HTTP/1.0 550 Server Made Big Boo"
在php-5.2.4 中添加了相似,但不相同的功能:若是被訪問的php腳本包含語法錯誤,而且 display_errors = off,會馬上返回「HTTP/1.0 500 Internal Server Error」。
若是你須要設定一個 503錯誤,或者想要使這個行爲獨立於 display_errors 的設置,那麼可使用fastcgi.error_header。若是你在php-5.2.5 或以上版本上啓用 php-fpm,那麼fastcgi.error_header的優先級更高。
優化的上傳支持
實質:web server 支持
類型:優化
這個特性正如名字那樣,能夠加速對大 POST 請求的處理速度,包括文件上傳。優化是經過將請求體已寫入一個臨時文件,而後fastcgi協議傳遞文件名而不是請求體到來實現的。只有 nginx0.5.9 以上才支持這個功能。顯然,這種模式只在php和 web server 在一臺機器上的時候才能用。
nginx 樣例配置:
location ~ \.php$ {
fastcgi_pass_request_body off;
client_body_in_file_only clean;
fastcgi_param REQUEST_BODY_FILE $request_body_file;
...
fastcgi_pass ...;
}
在php中不須要配置任何東西。若是php收到了參數REQUEST_BODY_FILE,就讀取其中的請求體,若是沒有,就自行從fastcgi協議中讀取請求體。
結合這個特性,能夠考慮對 臨時文件使用內存文件系統,例如tmpfs(linux):
client_body_temp_path /dev/shm/client_body_temp;
fastcgi_finish_request()
範圍:php函數
類型:優化
這個特性能夠提升一些php請求的處理速度。若是有些處理能夠在頁面生成 完後進行,就可使用這種優化。好比,在 memcached 中保存 session 就能夠在頁面交給 web server 後進行。fastcgi_finisth_request() ,這一特性能夠結束響應輸出,web server 能夠當即開始交給等不及的客戶端,而此刻,php能夠在請求的上下文環境中處理許多事情。好比保存session,轉換上傳的視頻,處理統計等等。
fastcgi_finisth_request() 會觸發 shutdown 函數運行。
request_slowlog_timeout
範圍:php-fpm.conf 選項
分類: 方便
這個選項能讓你跟蹤執行緩慢的腳本並把他們連同調用棧一塊兒記錄在日誌文件中。例如以下設置:
<value name="request_slowlog_timeout">5s</value>
<value name="slowlog">logs/slow.log</value>
正如你再例子中看到的,腳本運行了 5 秒以上,並極可能是因爲 mysql 響應慢形成的(top backtrace)
相關文章
相關標籤/搜索