操作環境:
OS: Ubuntu Server 16.04.3 LTS amd64 Apache Version: 2.4.27 PHP Version: 7.1.8
Step 1. 更新 APT Source,取得最新版套件資訊
1
2
3
4
5
6
7
8
9
10
11
|
# 安裝software-properties-common (已安裝者可跳過此步驟)
sudo apt-get install -y software-properties-common
# 加入 Apache PPA
sudo add-apt-repository -y ppa:ondrej/apache2
# 加入 PHP PPA
sudo add-apt-repository -y ppa:ondrej/php
# 更新套件清單
sudo apt-get update
|
Step 2. 安裝套件
1
2
3
4
5
6
7
8
|
# 安裝 Apache HTTP Server
sudo apt-get install -y apache2
# 安裝 PHP、PHP-FPM 與OPcache
sudo apt-get install -y php7.1 php7.1-fpm php7.1-opcache
# 安裝所需的 PHP Extensions (依照自身需求增加)
sudo apt-get install -y php7.1-cli php7.1-dev php7.1-phpdbg php7.1-bz2 php7.1-common php7.1-curl php7.1-gd php7.1-json php7.1-ldap php7.1-mbstring php7.1-mcrypt php7.1-mysql php7.1-readline php7.1-snmp php7.1-tidy php7.1-xml php7.1-xmlrpc php7.1-zip
|
Step 3. 設定以 Apache Event MPM + PHP-FPM 運作
預設情況下 Apache 會以 Prefork Mode 運作
相容性好,但是消耗的資源多
在 High Concurrency 的環境下效能不理想
使用 Apache 官方 PHP Module (libapache2-mod-php)
只能在 Prefork mode 下運作
若要提升伺服器的負載量
一是使用其他的 Web Server (如Nginx)
二是將 Apache 切換成 Worker 或是 Event Mode 運作
並搭配 PHP-FPM 來處理連線請求
本文以 Event Mode 實作
1
2
3
4
5
6
7
8
9
10
|
# 將 Apache MPM 由 Prefork 切換為 Event
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
# 啟用 PHP-FPM 與 proxy_fcgi (安裝 php7.1-fpm 後會在 /etc/apache2/conf-available 下多出一個 php7.1-fpm.conf,proxy_fcgi 的用途是將 HTTP Request 以 proxy 的方式轉交給 PHP-FPM 處理 )
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.1-fpm
# 重新啟動 Apache Service (切換 MPM 時無法以 reload 套用新設定)
sudo service apache2 restart
|
使用 phpinfo()
檢查 PHP 環境
Server API 顯示為 FPM/FastCGI
時代表設定成功
同時 php.ini
與 Extensions INI 檔案都會顯示由 /etc/php/7.1/fpm
下載入
備註
使用 PHP-FPM 可能會讓 userdir
模組對 PHP 的處理失效
直接將 /etc/apache2/mods-available/userdir.conf
的 FilesMatch
Directive 上註解即可
1
2
3
4
5
6
7
8
9
10
|
# 這些通通上註解
# <FilesMatch "\.ph(p3?|tml)$">
# SetHandler application/x-httpd-php
# </FilesMatch>
# <FilesMatch ".+\.ph(p[345]?|t|tml)$">
# SetHandler application/x-httpd-php
# </FilesMatch>
# <FilesMatch "\.phps$">
# SetHandler application/x-httpd-php-source
# </FilesMatch>
|