[Ubuntu] 安裝 Apache HTTP Server 2.4 + PHP 7.1 + PHP-FPM

操作環境:

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.confFilesMatch 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>
comments powered by Disqus