在前篇 CentOS 中使用 Nginx 來架設 Web 伺服器 文中,我們透過安裝與部署 Nginx 來提供 Web 的服務,接下來我們將要開始讓 Nginx 支援 PHP 運行的環境。對於 Nginx 而言,它並不懂什麼叫作 PHP,這對於它不過就是一個檔案,如果當有連線請求,他會直接將檔案的內容整個輸出。

php_logo

實際上,我們可以透過 Nginx 提供 FastCGI,將檔案類型為 PHP 的請求轉給不同的服務來處理。因此,在這裡我們將安裝 PHP-FPM (FastCGI Process Manager) 服務,負責接收由 Nginx 轉送的請求,運行 PHP 程式之後,再透過 Nginx 回傳結果。

PHP-FPM – A simple and robust FastCGI Process Manager for PHP

一、安裝 PHP-FPM 以及相關 PHP 模組

由於 PHP-FPM 並未被收錄在官方的 yum 清單當中,我們需要先透過安裝 remi 的 repo,再夠過 yum 安裝。

# 先安裝 remi repo
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-7.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

# 使用 remi 來安裝 PHP-FPM 與其他相關套件
yum --enablerepo=remi install php-fpm php-pdo php-mysql php-mcrypt php-mbstring php-gd php-xml php-xmlrpc php-pear php-pecl-apc

yum install php-fpm

從上圖可以看到目前透過 remi 取得的 PHP-FPM 版本為 5.3.18

二、設定 PHP 設定檔

在裝完 PHP-FPM 後,一樣會產生 php.ini 的設定檔,此部份您可以如同往常一樣,就你認為有必要的部份去調整就可;一般我在初始安裝時,會注意下面幾項設定。

# vi /etc/php.ini

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

date.timezone = "Asia/Taipei"
error_reporting = E_ALL & ~E_NOTICE
display_errors = On
magic_quotes_gpc = Off

三、設定 PHP-FPM 設定檔

# vi /etc/php-fpm.conf

include=/etc/php-fpm.d/*.conf

[global]

pid = /var/run/php-fpm/php-fpm.pid
error_log = /var/log/php-fpm/error.log

你會發現這檔案沒什麼要注意的,主要的內容都會在 /etc/php-fpm.d/*.conf,在這裡我們稱為 Pool 設定檔(一組設定表示為一個資源區)

四、設定 PHP-FPM 的 Pool 設定檔

預設的 Pool 設定檔為 /etc/php-fpm.d/www.conf ,您可以適需要產生多組 Pool 來負責不同的網站服務。

# vi /etc/php-fpm.d/www.conf

[www]

listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1

user = nginx
group = nginx

pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35

slowlog = /var/log/php-fpm/www-slow.log

php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on

其中要注意 PHP-FPM 使用那個 Linux 帳戶/群組在運行,基本上,我們不會希望由網頁呼叫的 PHP 程序能有太高的權限(我會將他修改為 nginx 用戶)。然而相對應的 Session , Upload , Log 等暫存的資料夾也必需要有相同的權限配置。

# 預設 Log 檔的權限
chown -R nginx:nginx /var/log/php-fpm

# 預設 PHP SESSION 檔的權限
mkdir /var/lib/php/session
chown -R nginx:nginx /var/lib/php

五、啟動 PHP-FPM 服務

# 啟動服務
service php-fpm start
chkconfig php-fpm on

# 查看 Port 9000
netstat -ant

這裡就不需要特別去修改防火牆 (iptables),因為對於 PHP-FPM 這服務而言,只要接收由本機的 Nginx 連線而已。

六、設定 Nginx 虛擬主機設定檔

設定 Nginx 的 Server 區塊 (預設為 /etc/nginx/conf.d/default.conf ) ,加入下面的 location 區塊設定,將 php 的請求使用 FastCGI 連結送給 PHP-FPM 處理。

# vi /etc/nginx/conf.d/default.conf

# 將 PHP 轉到 PHP-FPM 處理
location ~ \.php$ {
    root /usr/share/nginx/html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_param  SCRIPT_NAME      $fastcgi_script_name;
    include        fastcgi_params;
}

# 重啟 Nginx 服務
# service nginx reload

七、驗收

在您的網站根目錄去產生一個 php 檔案來試試吧~

php-test-info

Related Posts Plugin for WordPress, Blogger...

您可以延伸閱讀這些文章:

  1. [教學] 在 CentOS 中使用 Nginx 來架設 Web 伺服器
Tagged with:
 
About The Author

阿百

大家好,我是陳彥百(YenPai Chen)

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

*

你可以使用這些 HTML 標籤與屬性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>