首先我們要區(qū)分"/usr/local/php2/etc/php-fpm.conf"文件和"/usr/local/php2/etc/php.ini"文件這兩者的區(qū)別。
在南華等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站建設(shè)、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作按需定制開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),全網(wǎng)營銷推廣,成都外貿(mào)網(wǎng)站制作,南華網(wǎng)站建設(shè)費(fèi)用合理。
/usr/local/php2/etc/php-fpm.conf是php-fpm這個(gè)服務(wù)使用的文件,管理php-fpm服務(wù)的相關(guān)配置;/usr/local/php2/etc/php.ini是php的全局配置文件。
這節(jié)學(xué)習(xí)php-fpm的配置
編輯php-fpm配置文件
[root@LnmpLinux ~]# vim /usr/local/php2/etc/php-fpm.conf
發(fā)現(xiàn)內(nèi)容很亂,我們給他整理一下,用我們已經(jīng)整理好的配置寫進(jìn)去;
先清空配置內(nèi)容,重新寫入
[root@LnmpLinux ~]# > /usr/local/php2/etc/php-fpm.conf
[root@LnmpLinux ~]# vim /usr/local/php2/etc/php-fpm.conf
[global]
pid = /usr/local/php2/var/run/php-fpm.pid
error_log = /usr/local/php2/var/log/php-fpm.log
[www]
listen = /tmp/www.sock
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
內(nèi)容解析:
[www]里面是我們的pool(池),用ps aux |grep php-fpm可以查看pool;不同的pool顯示不同的名字,我們的php-fpm可以啟用多個(gè)pool,可針對不同網(wǎng)站域名,使用不同的pool;不同的pool意味著去監(jiān)聽不同的socket或不同的ip+port(端口),我們平時(shí)用的最多的是*.sock,默認(rèn)的是127.0.0.1:9000
(1)listen = /tmp/www.sock
監(jiān)聽的形式是socket,名字可以自定義,比如這個(gè)文件的名字www.sock;
(2)user = php-fpm
group = php-fpm
這個(gè)名字也可以自定義
(3)pm = dynamic (動(dòng)態(tài)管理,主要針對下面的信息)
(4)
pm.max_children = 50 # 子進(jìn)程最大50個(gè);
pm.start_servers = 20 # 最開始有20個(gè)啟動(dòng);
pm.min_spare_servers = 5 # 空閑最少有5個(gè);
pm.max_spare_servers = 35 # 空閑最多有35個(gè);
pm.max_requests = 500 # 一個(gè)子進(jìn)程在它生命周期內(nèi),一共處理多少請求后自動(dòng)銷毀;
rlimit_files = 1024 # 每個(gè)進(jìn)程使用文件描述符的限制。
(5)如果把pm = dynamic改成pm = static,那么只有pm.max_children = 50 生效,
其他的都不生效,建議默認(rèn)使用dynamic,可以動(dòng)態(tài)分享資源。
問題:如果要建立多個(gè)pool怎么辦?
答:只要復(fù)制[www]下的信息,粘貼在[www]所在pool的下面另起一段,
可以改名為[www1],同時(shí)對應(yīng)的sock也要更改為/tmp/www1.sock。
舉例:
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
[www]
listen = /tmp/www.sock
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50 原有的pool
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
[www1]
listen = /tmp/www1.sock
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50 新增的pool
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
(以上配置為假設(shè))
我們繼續(xù)向下配置
檢查有無錯(cuò)誤
[root@LnmpLinux ~]# /usr/local/php2/sbin/php-fpm -t
重啟php-fpm
[root@LnmpLinux ~]# /etc/init.d/php-fpm restart
[root@LnmpLinux ~]# ps aux |grep php-fpm
就能看到pool的信息,以及默認(rèn)啟動(dòng)20個(gè)
如果過段時(shí)間沒有請求,那么他就會一點(diǎn)點(diǎn)損耗,越來越少,最后銷毀。
我們可以把不同的域名對應(yīng)不同的pool(池),首先我們在/usr/local/nginx/conf/vhosts下面寫多個(gè)域名,假如新增一個(gè)域名為111.conf的域名,并設(shè)定其對應(yīng)的pool為www,
內(nèi)容如下:
[root@LnmpLinux vhosts]# vim 111.conf
server
{
listen 80;
server_name www.111.com;
index index.html index.htm index.php;
root /data/www; # 指向Discuz論壇目錄下
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/tmp/www.sock; # 指向的pool(池)
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name; # 指向Discuz論壇目錄下
}
}
問:以上是讓我們了解不同的域名對應(yīng)不同的Pool的形式和寫法,那么我這樣劃分的好處是什么呢?
第一點(diǎn),好處是我們可以把權(quán)限分開,假如網(wǎng)站有漏洞,不小心被***,獲得了我們的用戶名和權(quán)限,***者只能用當(dāng)前Pool的權(quán)限,從而提高安全性;
第二點(diǎn),假如[www]這個(gè)pool的請求量太大,down掉了,進(jìn)程不夠用,如果都是使用一個(gè)pool的話,一個(gè)網(wǎng)站掛掉了,那么其他網(wǎng)站也跟著掛掉了,會受到牽連。
所以這樣劃分的好處是可以避免多個(gè)網(wǎng)站同時(shí)出問題。
我們也可以在php-fpm配置里做一些性能追蹤的操作:
假如我們工作中遇到,訪問網(wǎng)站,但是加載速度非常慢,我們可以在[www]池的最后面加上
slowlog = /tmp/www_slow.log <--(名字可以自定義,但不同的pool指向不同的slowlog)
request_slowlog_timeout = 1
寫好以上兩行,可以通過slowlog排查網(wǎng)站慢的原因。
Apache可以設(shè)置open_basedir,同樣php-fpm也可以設(shè)置:
在slowlog兩行下面補(bǔ)充加上:
php_admin_value[open_basedir]=/data/www/:/tmp/
(這一行是安全選項(xiàng))