php-fpm的pool是這個php-fpm服務的池子,php-fpm支持定義多個池子,可以監聽多個不一樣的sock或者監聽不一樣的ip。若是Nginx上跑了幾個站點,每一個站點均可以配置一個pool,當其中一個站點的php報502或者其餘錯誤了,那麼其餘的站點就不會受到影響。若是所有站點都使用同一個pool的話,當其中一個php出問題了,那麼所有的站點都會癱掉,因此須要每一個站點配置一個pool,把這些站點都隔離開來。php
配置pool能夠在php-fpm的主配置文件裏進行配置:nginx
vim /usr/local/php-fpm/etc/php-fpm.confvim
在配置文件中增長以下內容: [aming.com] listen = /tmp/test.sock #listen = 127.0.0.1:9000 listen.mode = 666 user = php-fpm group = php-fpm pm = dynamic pm.max_children = 50 pm.start_servers = 20 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests = 500 rlimit_files = 1024
而後測試一下有沒有語法錯誤,沒問題的話就重啓:bash
[root@aming-01 etc]# /usr/local/php-fpm/sbin/php-fpm -t [02-May-2018 23:25:33] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful [root@aming-01 etc]# /etc/init.d/php-fpm reload
這時候查看一下php-fpm進程會發現多了一個pool,也就是咱們剛剛配置的那個aming.com:架構
查看進程:ps aux |grep php-fpm框架
而後在虛擬主機配置文件裏配置這個pool:運維
vim /usr/local/nginx/conf/vhost/aaa.com.confcurl
增長以下內容:php-fpm
location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/tmp/aming.sock; #fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /data/wwwroot/aming.com$fastcgi_script_name; }
配置完成實例:測試
把pool都配置在主配置文件裏感受比較亂,咱們能夠把這些pool都分離到一個個文件中,首先在php-fpm主配置文件裏的[global]部分加上如下內容:
include = etc/php-fpm.d/*.conf
接着建立一個php-fpm.d目錄:
mkdir /usr/local/php-fpm/etc/php-fpm.d/
進入到該目錄下:
cd /usr/local/php-fpm/etc/php-fpm.d/
建立一個www.conf文件:
vim www.conf
而後複製php-fpm主配置文件裏www的那個pool內容,粘貼到這個www.conf文件中:
接着再建立一個test.conf,一樣的也是複製粘貼php-fpm主配置文件裏aming.com的那個pool內容:
這時就能夠把php-fpm主配置文件裏的pool都刪了。
#配置文件 [www] listen = /tmp/php-fcgi.sock #listen = 127.0.0.1:9000 listen.mode = 666 user = php-fpm group = php-fpm pm = dynamic pm.max_children = 50 pm.start_servers = 20 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests = 500 rlimit_files = 1024 [aming.com] listen = /tmp/aming.sock #listen = 127.0.0.1:9000 listen.mode = 666 user = php-fpm group = php-fpm pm = dynamic pm.max_children = 50 pm.start_servers = 20 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests = 500 rlimit_files = 1024
這樣把pool分離出來後,php-fpm主配置文件裏就乾淨多了,不必把pool配置在主配置文件裏,只須要在裏面用include引入便可。
記得配置完後,檢測一下語法有沒有錯誤,以上就是如何配置pool的簡單介紹。
檢查語法和重啓:
php-fpm的慢執行日誌是一個頗有用的東西,若是須要作php的網站,建議使用lnmp架構,由於咱們能夠去分析php-fpm的慢執行日誌,在運維的平常工做當中常常會遇到一個讓人頭疼的問題,那就是你的老闆或者你的客戶常常會反饋網站的訪問速度變慢了,因此咱們得知道訪問慢的根本緣由,才能去解決這個訪問慢的問題。若是是php網站,就能夠經過慢執行日誌去分析緣由,因此才說php-fpm的慢執行日誌是一個頗有用的東西。
下面用示例介紹一下如何配置慢執行日誌:
編輯www.conf文件:
vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
增長如下內容: request_slowlog_timeout = 1 slowlog = /usr/local/php-fpm/var/log/www-slow.log
修改完成夠,測試一下語法,並從新加載配置文件:
[root@aming-01 php-fpm.d]# /usr/local/php-fpm/sbin/php-fpm -t #檢測語法是否有錯誤 [02-May-2018 23:56:48] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful [root@aming-01 php-fpm.d]# /etc/init.d/php-fpm reload #重啓php-fpm服務 Reload service php-fpm done
而後查看一下是否有生成日誌文件,這個時候日誌文件是空的:
接下來咱們來模擬一個慢執行的php,須要寫一個腳本:
vim /data/wwwroot/test.com/sleep.php
腳本內容以下:
<?php echo "test slow log"; sleep(2); echo "done"; ?>
使用curl對這個腳本進行訪問:
訪問完以後查看慢執行日誌,這個日誌告訴了咱們如下信息:
如今咱們打開sleep.php看一看:
因此這就是慢執行日誌的做用,可以幫咱們記錄訪問慢的緣由。不過通常正常狀況下定義爲2秒才記錄日誌會比較好,由於不少的腳本執行因爲硬件或框架的緣由,都會致使執行時間超過1秒。
以前在Apache裏介紹過open_basedir的做用了,這裏就不過多介紹了,只介紹一下在Nginx中的配置過程。
編輯配置文件:
vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
加入如下內容:
php_admin_value[open_basedir]=/data/wwwroot/test.com:/tmp/
保存退出後從新加載配置文件,而後使用curl進行訪問,可以正常訪問就沒問題:
curl -x127.0.0.1:80 test.com/sleep.php -I
定義php-fpm的錯誤日誌:
vim /usr/local/php-fpm/etc/php.ini
搜索:error_log
而後在error_log下面指定錯誤日誌存放路徑:
定義日誌級別
搜索:error_reporting
保存退出後,修改pool文件,故意改錯,測試一下是否會記錄錯誤日誌:
而後建立錯誤日誌文件,而且修改此文件的權限爲777:
重啓php-fpm服務:
進行訪問,能夠看到報了404錯誤:
如今就能夠去看看日誌文件裏是否有記錄這條錯誤信息:
cat /usr/local/php-fpm/var/log/php_errors.log
而後咱們把pool文件修改正確,再次重啓php-fpm,接着再進行訪問,狀態碼爲200就沒問題了:
關於static和dynamic 的一些區別:
Static:
這些進程的數量都是能夠自定義的。
個人博客即將搬運同步至騰訊雲+社區,邀請你們一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=1gd4fdbso9x7k