天天看點

LNMP中php-fpm的配置檔案

    首先我們要區分"/usr/local/php2/etc/php-fpm.conf"檔案和"/usr/local/php2/etc/php.ini"檔案這兩者的差別。

    /usr/local/php2/etc/php-fpm.conf是php-fpm這個服務使用的檔案,管理php-fpm服務的相關配置;/usr/local/php2/etc/php.ini是php的全局配置檔案。

這節學習php-fpm的配置

編輯php-fpm配置檔案

[root@LnmpLinux ~]# vim /usr/local/php2/etc/php-fpm.conf

發現内容很亂,我們給他整理一下,用我們已經整理好的配置寫進去;

先清空配置内容,重新寫入

[root@LnmpLinux ~]# > /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

内容解析:

[www]裡面是我們的pool(池),用ps aux |grep php-fpm可以檢視pool;不同的pool顯示不同的名字,我們的php-fpm可以啟用多個pool,可針對不同網站域名,使用不同的pool;不同的pool意味着去監聽不同的socket或不同的ip+port(端口),我們平時用的最多的是*.sock,預設的是127.0.0.1:9000

(1)listen = /tmp/www.sock 

     監聽的形式是socket,名字可以自定義,比如這個檔案的名字www.sock;

(2)user = php-fpm

        group = php-fpm

     這個名字也可以自定義

(3)pm = dynamic (動态管理,主要針對下面的資訊)

(4)

    pm.max_children = 50         # 子程序最大50個;

    pm.start_servers = 20        # 最開始有20個啟動;

    pm.min_spare_servers = 5     # 空閑最少有5個;

    pm.max_spare_servers = 35    # 空閑最多有35個;

    pm.max_requests = 500        # 一個子程序在它生命周期内,一共處理多少請求後自動銷毀;

    rlimit_files = 1024          # 每個程序使用檔案描述符的限制。

(5)如果把pm = dynamic改成pm = static,那麼隻有pm.max_children = 50 生效,

其他的都不生效,建議預設使用dynamic,可以動态分享資源。

問題:如果要建立多個pool怎麼辦?

答:隻要複制[www]下的資訊,粘貼在[www]所在pool的下面另起一段,

    可以改名為[www1],同時對應的sock也要更改為/tmp/www1.sock。

舉例:

pid = /usr/local/php/var/run/php-fpm.pid

error_log = /usr/local/php/var/log/php-fpm.log

listen = /tmp/www.sock

pm.max_children = 50                                            原有的pool

[www1]

listen = /tmp/www1.sock

pm.max_children = 50                                           新增的pool

(以上配置為假設)

我們繼續向下配置

檢查有無錯誤

[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的資訊,以及預設啟動20個

如果過段時間沒有請求,那麼他就會一點點損耗,越來越少,最後銷毀。

我們可以把不同的域名對應不同的pool(池),首先我們在/usr/local/nginx/conf/vhosts下面寫多個域名,假如新增一個域名為111.conf的域名,并設定其對應的pool為www,

内容如下:

[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論壇目錄下

    }

}

問:以上是讓我們了解不同的域名對應不同的Pool的形式和寫法,那麼我這樣劃分的好處是什麼呢?

    第一點,好處是我們可以把權限分開,假如網站有漏洞,不小心被入侵,獲得了我們的使用者名和權限,入侵者隻能用目前Pool的權限,進而提高安全性;

    第二點,假如[www]這個pool的請求量太大,down掉了,程序不夠用,如果都是使用一個pool的話,一個網站挂掉了,那麼其他網站也跟着挂掉了,會受到牽連。

    是以這樣劃分的好處是可以避免多個網站同時出問題。

我們也可以在php-fpm配置裡做一些性能追蹤的操作:

假如我們工作中遇到,通路網站,但是加載速度非常慢,我們可以在[www]池的最後面加上

slowlog = /tmp/www_slow.log      <--(名字可以自定義,但不同的pool指向不同的slowlog)

request_slowlog_timeout = 1

寫好以上兩行,可以通過slowlog排查網站慢的原因。

Apache可以設定open_basedir,同樣php-fpm也可以設定:

在slowlog兩行下面補充加上:

php_admin_value[open_basedir]=/data/www/:/tmp/

(這一行是安全選項)

本文轉自 聽丶飛鳥說 51CTO部落格,原文連結:http://blog.51cto.com/286577399/1683416

繼續閱讀