由於終於受不了速度太慢,耗用太多記憶體,所以改用 FastCGI 來跑我的服務。這種做法的好處就不用多說了,網路上很多人都有講,不過我找到的這類教學文章環境大多都是 FreeBSD 上的,所以照著弄了一下,終於搞出來。以下是給 Debian Linux 的作法,做個筆記:
首先到 /etc/apt/sources.list ,在 main 後面加上 non-free 因為 libapache2-mod-fastcgi 屬於 non-free 。
1 2 3 4 |
deb http://debian.linux.org.tw/debian/ lenny main non-free deb-src http://debian.linux.org.tw/debian/ lenny main non-free |
接著安裝 Apache2 Mpm Worker 、 FastCGI Module 以及 PHP5-CGI:
1 2 3 |
apt-get install apache2-mpm-worker libapache2-mod-fastcgi php5-cgi |
安裝 Apache2 Mpm Worker 會移除 Apache2 Mpm prefork 和 PHP5 Module 。所以請注意!如果沒有把握,請先把 HTTP 檔案都隔離開來,以避免 PHP5 的 Module 被移除掉之後,你的原始碼都被下載光了。
接著啟用 Apache2 的 Module Actions 和 FastCGI
1 2 3 |
a2enmod actions fastcgi |
寫個 script 來執行 FastCGI
1 2 3 4 5 6 7 8 |
#!/bin/bash PHPRC="/etc" export PHPRC PHP_FCGI_CHILDREN=128 export PHP_FCGI_CHILDREN exec /usr/bin/php5-cgi |
把這個檔案存成 “php.fgci” 然後新建個目錄,某個目錄下 (以這個範例來說是 /var/www 下) 。接著然後改寫 Apache2 的 Config
1 2 3 4 5 6 7 8 9 10 |
ScriptAlias /fastcgi/ "/var/www/fastcgi/" <Directory /var/www/fastcgi> Options ExecCGI FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> |
寫完這邊之後,請確認是否有 /etc/apache2/mods-enabled/fastcgi.conf 這個檔案,並且內容為:
1 2 3 4 5 6 7 8 9 |
<IfModule mod_fastcgi.c> AddHandler fastcgi-script .fcgi AddHandler php-fastcgi .php .php5 .inc Action php-fastcgi /fastcgi/php.fcgi FastCgiIpcDir /var/lib/apache2/fastcgi FastCgiConfig -pass-header HTTP_AUTHORIZATION -autoUpdate -killInterval 120 -idle-timeout 60 -maxClassProcesses 1 </IfModule> |
都完成之後,重跑 Apache2 /etc/init.d/apache2 restart
即可。
至於更進接的設定可以參考大神兩年前寫的apache22 (worker) + mod_fastcgi + php5-fcgi這篇文章研究一下。
GREAT 很詳盡