Debian 手動編譯安裝 nginx + PHP-FPM 指北

目前網上各種不靠譜的自動化安裝腳本不計其數。 nginx + PHP-FPM 教程也不多,本篇備忘錄重點針對 PHP-FPM 安裝,參考 nginx 官方 docs 與 Slicehost wiki 編寫而成

安裝 nginx

# 拿到全新伺服器後,先升級系統
aptitude update && aptitude -y full-upgrade

# 顯示 nginx 所需要的相關組件
aptitude show nginx

# 於是安裝上面的提示安裝
aptitude install make install libc6 libpcre3 libpcre3-dev libpcrecpp0 libssl0.9.8 libssl-dev zlib1g zlib1g-dev lsb-base

# 進入臨時資料夾,準備編譯 nginx
cd /tmp

# 下載最新穩定版 nginx: http://nginx.org/en/download.html
wget http://nginx.org/download/nginx-0.8.54.tar.gz

# 解包
tar -zxvf nginx-0.8.54.tar.gz

# 進入 nginx 目錄
cd nginx-0.8.54

# 配置編譯選項,--prefix 和 --sbin 用於更改 nginx 的位置,如果有需求,也可加上 --with-http_gzip_static_module (詳細)
./configure --prefix=/opt/nginx --sbin-path=/usr/local/sbin --with-http_ssl_module

# 之後會出現下列提示 (節選),最好可以記住
nginx path prefix: "/opt/nginx"
nginx binary file: "/usr/local/sbin"
nginx configuration prefix: "/opt/nginx/conf"
nginx configuration file: "/opt/nginx/conf/nginx.conf"
nginx pid file: "/opt/nginx/logs/nginx.pid"
nginx error log file: "/opt/nginx/logs/error.log"
nginx http access log file: "/opt/nginx/logs/access.log"
 
# 然後執行安裝,至此 nginx 安裝完成
make
make install

讓 nginx 自動運行

# 嘗試執行下列命令,之後用瀏覽器指向主機 IP,就會出現 nginx 的默認頁面
/usr/local/sbin/nginx

# 如何停止 nginx 進程?如果你還記得在前面提到的 nginx pid file: "/opt/nginx/logs/nginx.pid",那麼不難
sudo kill `cat /opt/nginx/logs/nginx.pid`

# 為了今後的方便操作,我們可以製作一個 nginx 運行腳本,例如執行 /etc/init.d/nginx restart 就可以重啓 nginx
# 那麼先回到臨時目錄
cd /tmp

# 下載已寫好的 nginx 運行腳本
wget http://pastebin.com/raw.php?i=uARPkW13

# 移動到正確的位置並更名
mv nginx.init.sh /etc/init.d/nginx

# 為腳本增加執行權限
chmod +x /etc/init.d/nginx

# 然後就可以用下面的這些命令來控制 nginx 了,更多命令請參考 .sh 的代碼
/etc/init.d/nginx start
/etc/init.d/nginx stop
/etc/init.d/nginx restart
/etc/init.d/nginx status

# 為了讓每次伺服器重啓時 nginx 都能自動運行,執行下列命令,至此 nginx 的最基本配置就完成了
/usr/sbin/update-rc.d -f nginx defaults

安裝 PHP-FPM

# 安裝 PHP-FPM,PHP 5.3.3 中已綑綁了 PHP-FPM,為了避免不必要的進程設置問題,這裡選擇的是 dotdeb 的第三方源安裝,而不是編譯安裝,執行下列腳本為 dotdeb 增加倉庫
echo "deb http://php53.dotdeb.org stable all" >> /etc/apt/sources.list

# 然後更新倉庫
aptitude update

# 不過通常來講,更新到 dotdeb 的時候會報錯
W: GPG error: http://php53.dotdeb.org stable Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY E9C74FEEA2098A6E
W: You may want to run apt-get update to correct these problems

# 不要被那白癡騙了,執行下列命令,記得把 PUBKEY 替換掉
gpg --keyserver pgpkeys.mit.edu --recv-key  E9C74FEEA2098A6E
gpg -a --export E9C74FEEA2098A6E | sudo apt-key add -

# 繼續更新,這下沒問題了
aptitude update

# 先安裝 PHP 和必要組件
aptitude install php5-cli php5-common php5-suhosin

# 然後安裝 FPM,至此 PHP-FPM 安裝完成
aptitude install php5-fpm php5-cgi

讓 nginx 支持 PHP

# 為了讓 nginx 正確處理 PHP 腳本,需要如下設置,首先打開 nginx 的配置文件
nano /opt/nginx/conf/nginx.conf

# 由於 nginx 的配置文件系統過於龐大,這里就不展開講了。在常規的 location / 結束後,加入下列內容,路徑要記得替換掉
# for PHP-FPM
location ~ .php$ {
  fastcgi_split_path_info ^(.+.php)(.*)$;
  fastcgi_pass 127.0.0.1:9000;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME /srv/www/postholic.com/public_html$fastcgi_script_name;
  include /opt/nginx/conf/fastcgi_params;
}

# 重啓 nginx,至此 nginx 已經可以正確解析 .php 文件了
/etc/init.d/nginx restart

備註:一些需要知道的文件、命令

# PHP 的配置文件
/etc/php5/fpm/php.ini

# PHP-FPM 的配置文件
/etc/php5/fpm/php5-fpm.conf

# 讓 PHP-FPM 設置生效的方法
/etc/init.d/php5-fpm restart

# 最初安裝完 nginx 的默認首頁路徑
/usr/local/nginx/html

# 用於快速建立新首頁路徑的命令
mkdir -p /srv/www/domain.tld/public_html
mkdir -p /srv/www/domain.tld/logs