## 使用?[PHP-FPM](http://php.net/manual/zh/install.fpm.php)
有多種方式來配置一個 web 服務器以提供 PHP 服務。傳統(并且糟糕的)的方式是使用 Apache 的?[mod_php](http://stackoverflow.com/questions/2712825/what-is-mod-php)。Mod_php將PHP 綁定到 Apache 自身,但是 Apache 對于該模塊功能的管理工作非常糟糕。一旦遇到較大的流量, 就會遭受嚴重的內存問題。
后來兩個新的可選項很快流行起來:[mod_fastcgi](http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html)?和?[mod_fcgid](http://httpd.apache.org/mod_fcgid/)。 兩者均保持一定數量的 PHP 執行進程, Apache 將請求發送到這些端口來處理 PHP 的執行。由于這些庫限制了存活的 PHP 進程的數量, 從而大大減少了內存使用而沒有影響性能。
一些聰明的人創建一個 fastcgi 的實現,專門為真正與 PHP 工作良好而設計,他們稱之為?[PHP-FPM](http://php.net/manual/zh/install.fpm.php)。PHP 5.3.0 之前,為安裝它, 你得跨越許多障礙,但幸運的是,PHP 5.3.3 的核心包含了 PHP-FPM,因此在 Ubuntu 12.04 上安裝它非常方便。
如下示例是針對 Apache 2.2.22 的,但 PHP-FPM 也能用于其他 web 服務器如 Nginx。
## 安裝 PHP-FPM 和 Apache
在 Ubuntu 12.04 上你可以使用如下命令安裝 PHP-FPM 和 Apache:
~~~
user@localhost: sudo apt-get install apache2-mpm-worker
libapache2-mod-fastcgi php5-fpm
user@localhost: sudo a2enmod actions alias fastcgi
~~~
注意我們?**必須**?使用 apache2-mpm-worker,而不是 apache2-mpm-prefork 或 apache2-mpm-threaded。
接下來配置 Aapache 虛擬主機將 PHP 請求路由到 PHP-FPM 進程。將如下配置語句放入 Apache 配置文件(在 Ubuntu 12.04 上默認配置文件是 /etc/apache2/sites-available/default)。
~~~
<VirtualHost *:80>
AddHandler php5-fcgi .php
Action php5-fcgi /php5-fcgi
Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9000 -idle-timeout 120 -pass-header Authorization
</VirtualHost>
~~~
最后,重啟 Apache 和 FPM 進程:
~~~
user@localhost: sudo service apache2 restart && sudo service php5-fpm
restart
~~~
## 進一步閱讀
* [PHP 手冊:PHP-FPM](http://php.net/manual/zh/install.fpm.php)
* [PHP-FPM 主頁](http://php-fpm.org/)
* [在 Ubuntu 服務器 Maverick 上安裝 Apache + mod_fastcgi + PHP-FPM](https://alexcabal.com/installing-apache-mod_fastcgi-php-fpm-on-ubuntu-server-maverick/)
* [為什么 mod_php 的性能很糟糕](http://www.joomlaperformance.com/articles/webcasts/why_mod_php_is_bad_for_performance_52_58.html)