顯示廣告
隱藏 ✕
看板 KnucklesNote
作者 Knuckles (站長 那克斯)
標題 [CentOS] Apache MPM event模式 mod_proxy_fcgi, php-fpm
時間 2017-02-19 Sun. 00:46:28


Apache 2.4 的記憶體管理模式 MPM
除了預設的 prefork,還可以改用 event

使用 MPM event 要使用內建的 mod_proxy_fcgi
讓 PHP 網頁改為使用獨立的 php-fpm 來執行


安裝 php-fpm

$ sudo yum install php-fpm

修改 php-fpm 設定檔
$ sudo vim /etc/php-fpm.d/www.conf

例如記憶體有2G時,修改child process設定
預設是
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
;pm.max_requests = 500

改成
pm.max_children = 200
pm.start_servers = 30
pm.min_spare_servers = 30
pm.max_spare_servers = 100
pm.max_requests = 300

修改 rlimit_files = 1024
為 rlimit_files = 2048


修改 Apache 設定檔
$ sudo vim /etc/httpd/conf/httpd.conf
(或是將設定另外寫在 /etc/httpd/conf.d/common.conf 檔)

加上
<IfModule mpm_event_module>
  ServerLimit 32
  StartServers 32
  MinSpareThreads 128
  MaxSpareThreads 256
  ThreadsPerChild 32
  MaxRequestWorkers 1024
  MaxConnectionsPerChild 10000
</IfModule>


修改 Apache 虛擬主機設定檔
$ sudo vim /etc/httpd/conf.d/vhost.conf

每一個 VirtualHost 都要修改

例如 mydomain 的 VirtualHost
在 DocumentRoot /home/mydomain/www 這行前加上
    <IfModule mpm_event_module>
        ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/home/mydomain/www/$1
    </IfModule>

注意 fcgi://127.0.0.1:9000/home/mydomain/www/
後面的路徑要改成跟 DocumentRoot 一樣

意思就是把所有結尾是 .php 的網址改用 fcgi 來執行

如果有使用 Alias /phpMyAdmin 的話,要再加上這一行
        ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/phpMyAdmin/$1

如果有要限制 ip 存取的話,寫在 <Directory> 裡會失效
要改用
    <Proxy *>
        Require ip 192.168.0.0
    </Proxy>

修改 php.conf
$ sudo vim /etc/httpd/conf.d/php.conf

將以下內容加上#停用,以免與 php-fpm 的設定衝突
<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

php_value session.save_handler "files"
php_value session.save_path    "/var/lib/php/session"


將 Apache 的 MPM 模式改為 event

$ sudo vim /etc/httpd/conf.modules.d/00-mpm.conf

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_event_module modules/mod_mpm_event.so
改為
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
LoadModule mpm_event_module modules/mod_mpm_event.so


重啟 php-fpm 與 apache
$ sudo systemctl restart php-fpm
$ sudo systemctl restart httpd


參考
High-performance PHP on apache httpd 2.4.x using mod_proxy_fcgi and php-fpm.

Linode VPS 上 CentOS 7 中改 LAMP 执行方式为 PHP-FPM | 水景一页

Apache httpd 2.4.x 使用 mod_proxy_fcgi 和 PHP-FPM 的方式 | 水景一页
這篇探討了一下是否有比 ProxyPassMatch 更好的方式




--
※ 作者: Knuckles 時間: 2017-02-19 00:46:28
※ 編輯: Knuckles 時間: 2017-03-11 15:14:54
※ 看板: KnucklesNote 文章推薦值: 0 目前人氣: 0 累積人氣: 559 
分享網址: 複製 已複製
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇