[教學] 在 CentOS 中安裝 PHP-FPM for Nginx
在前篇 CentOS 中使用 Nginx 來架設 Web 伺服器 文中,我們透過安裝與部署 Nginx 來提供 Web 的服務,接下來我們將要開始讓 Nginx 支援 PHP 運行的環境。對於 Nginx 而言,它並不懂什麼叫作 PHP,這對於它不過就是一個檔案,如果當有連線請求,他會直接將檔案的內容整個輸出。
實際上,我們可以透過 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
從上圖可以看到目前透過 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 檔案來試試吧~
您可以延伸閱讀這些文章:
友站鏈結
標籤
Cache CentOS Convert Image Convert Photo DISK ESX Firewall FTP Highlighter htop HTTP iftop ImageMagick iotop IPTABLES LinkWithin Linux Manager Tools Memory Network Network Setting Nginx OS PHP PHP-FPM Proftpd Security Server Service SSH Syntax VMDK VMware VMware Tools vSphere Web Windows Live Write WLW WordPress WordPress Plugin XmlRpc 資訊安全 防火牆免責聲明
本網站對於任何使用或引用本網站網頁資料,引致之損失或損害,概不負責。 本網站亦有權隨時刪除、暫停或編輯本網站所登載之各項資料,以維護本網站之權益。