
首先需要一台Debian 8, 我這裡使用VMware建立虛擬機, 各位可在自己的主機或AWS, Google Cloud Platform的虛擬機上很容易的安裝好Debian
完成機器的作業系統安裝後, 接著就是將網路上提供的PHP 7 Package與Nginx官方提供最新版軟體加入到Debian軟體Source List
PHP 7可參考https://www.dotdeb.org/instructions/, 他們提供了PHP 7最新版已編譯好的軟體
執行
wget http://www.dotdeb.org/dotdeb.gpg
apt-key add dotdeb.gpg

將dotdeb的金鑰加入
Nginx官方一樣有編譯好的軟體, 同樣需要加入金鑰, 請參考https://nginx.org/en/linux_packages.html#mainline
執行
wget http://nginx.org/keys/nginx_signing.key
apt-key add nginx_signing.key

將nginx的金鑰加入
*其實dotdeb與Nginx都是提供HTTPS的金鑰URL, 用wget抓會出錯, 那就需要先裝上cURL
apt-get install curl
接著將PHP 7與Nginx加入Debian系統的軟體Sources List
執行
nano /etc/apt/sources.list

將兩者的軟體URL加入
# PHP 7
deb http://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all
# Nginx
deb http://nginx.org/packages/mainline/debian/ jessie nginx
deb-src http://nginx.org/packages/mainline/debian/ jessie nginx
儲存Sources List後, 需要更新它
執行
apt-get update
apt-get upgrade

有些系統檔案可能會順便更新

通常apt-get會詢問是否確定更新, 按下"y"鍵繼續
安裝PHP 7, 我們採用PHP-FPM, 另外PHP MySQL模組也需要安裝, 絕大部分應用軟體都會用到MySQL資料庫伺服器(本文這裡就不再提怎麼安裝MySQL伺服器了)
執行
apt-get install php-fpm php-mysql

PHP CLI也會一起安裝, 方便你檢視PHP的一些資訊, Zend OPcache模組也已啟動, 這是加速PHP的好物! 目前是PHP 7.0.13
安裝Nginx網站伺服器
執行
apt-get install nginx

Nginx 1.11.6安裝完成, 日後Nginx推出新版, 版號會更新, Nginx支援最新的HTTP 2協定, 設定上也簡單!
系統先調整參數
執行
nano /etc/sysctl.conf
將以下的設定值貼入sysctl.conf
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.rp_filter = 1
fs.file-max = 8192000
kernel.shmall = 134217728
kernel.shmmax = 134217728
net.core.rmem_max = 2088290
net.core.wmem_max = 1048576
net.core.rmem_default = 262143
net.core.wmem_default = 262143
net.core.netdev_max_backlog = 819200
net.ipv4.tcp_max_syn_backlog = 819200
net.ipv4.tcp_sack = 0
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_rmem = 4096 87380 524288
net.ipv4.tcp_wmem = 4096 65536 524288
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.forwarding = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.neigh.default.gc_thresh3 = 20480
net.ipv4.neigh.default.gc_thresh2 = 15360
net.ipv4.neigh.default.gc_thresh1 = 10240
net.unix.max_dgram_qlen = 512
vm.overcommit_memory = 1
net.ipv4.tcp_max_syn_backlog = 819200
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_syncookies = 0
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.core.somaxconn = 65535
接著執行以下命令讓設定生效
sysctl -p
接著來設定Nginx可以與PHP通訊
nano /etc/nginx/nginx.conf
修改Nginx的執行身分
user www-data;
使用epoll
events {
use epoll;
worker_connections 65535;
}
把Nginx版號隱藏, 並且使用gzip壓縮靜態檔案(像是HTML, CSS, JavaScript...檔案)
server_tokens off;
gzip on;
gzip_disable "msie6";
接著修改PHP的FPM設定
執行
nano /etc/php/7.0/fpm/pool.d/www.conf
PHP-FPM可使用TCP/IP或Unix Socket方式通訊, PHP跟Nginx都在同一台機器, 那預設的Unix Socket路徑就不用去動它了
listen = /run/php/php7.0-fpm.sock
確認PHP-FPM的執行身分
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
預設的"listen.mode = 0660"是被關閉的, 把這項設定值打開(移除註解的分號即可)
修改Nginx的預設網站設定
nano /etc/nginx/conf.d/default.conf
如果已經準備好要跑HTTP 2, 需要有效的網站憑證與私鑰
編輯
listen 80;
listen 443 default_server ssl http2;
server_name localhost;
ssl on;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/private.key;
location ~ \.php$ {
root /usr/share/nginx/html;
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Nginx的預設網站目錄是"/usr/share/nginx/html", 當然你也能修改為自己的目錄, 如果不需要跑HTTPS或HTTP 2, 那麼"litsen 443"與ssl的相關設定就不需要放上
寫個簡單小程式
nano /usr/share/nginx/html/index.php
輸入
<?php echo 'Hello World!'; ?>

稍後看看網站是不是能顯示"Hello World!", 確定PHP-FPM與Nginx動作正常
啟動PHP-FPM
/etc/init.d/php7.0-fpm start
重新啟動Nginx, 因為安裝Nginx時它預設就啟動了
/etc/init.d/nginx restart
如果有錯誤訊息, 可查看Nginx的Error Log (/var/log/nginx/error.log), 看哪裡出了問題
打開瀏覽器, 輸入網站域名或IP位址

PHP程式正確的執行了

或是可用phpinfo()查看系統裝了哪些模組, 不足的可以再補充安裝


PHP 7不再使用libmysqlclient, 所以只有mysqli與pdo_mysql的相關函數可用, 基本上大多的應用程式都支援, 像是WordPress在第4.4版後都能在PHP 7上正確執行
PHP-FPM其實有些細節效能調整, 網路上有許多資訊可參考, 在以上範例就是調整"/etc/php/7.0/fpm/pool.d/www.conf"內的設定值