在Ubuntu 16.04 上架設Nginx + PHP 7

前言

工作的緣故,需要使用這個不一樣的組合,可能有些人是第一次聽到吧XD

LEPP, 是我把:Linux + Nginx + PostgreSQL + PHP 的縮寫,並安裝在Ubuntu 16.04上面。為了把國外良好與優良的文章做整理,所以就催生出這篇文章出來。

前提作業系統環境

Ubuntu 16.04.* LTS

安裝Nginx + PHP

有了Ubuntu 16.04的作業系統之後,使用ssh方式登入,如下的畫面。


ssh user_name@your-host-name-or-ip-address

登入進去之後,開始進行下列的安裝Nginx套件指令。


sudo apt-get update

sudo apt-get install nginx

強烈建議使用ufw防火牆進行允許HTTP port 80 可以連入。


sudo apt-get install ufw

sudo ufw enable

sudo ufw allow 'Nginx HTTP'

sudo ufw status

接著拜訪下面的連結:


http://server_name_or_ip_address

看到下面的畫面之後,就會知道已經成功安裝了。

Nginx default page

安裝PHP 7

安裝完Ngnx之後,接下來要安裝的是PHP 7,因為要讓Nginx上面跑PHP,所以我們要額外的安裝Fast CGI module。我們就依照下面的指令依序安裝php與其fast cgi模組。

以及存取PostgreSQL的模組,以及一些我覺得有必要的擴展(extensions)。


sudo apt-get update

sudo apt-get install php-fpm php-pgsql

安裝好以後,可以運用下面的指令檢查看看是否PostgreSQL擴展已經安裝成功。


php -m | grep pg

接著設定與fpm有關PHP組態設定檔,別忘了,vim要安裝唷!


sudo vim /etc/php/7.0/fpm/php.ini

接著組態設定檔裡面,找到這一行:


;cgi.fix_pathinfo=1

把它改成


cgi.fix_pathinfo=0

改完之後存檔,並將服務php-fpm進行重啟


sudo service php7.0-fpm restart

接著,修改Nginx的sites-available設定檔


sudo vim /etc/nginx/sites-available/default

並按照下面的設定檔進行增加,下面是新增過後的設定檔的樣子。


server {
listen 80 default_server;
listen [::]:80 default_server;

root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;

server_name server_domain_or_IP;

location / {
try_files $uri $uri/ =404;
}

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}

location ~ /\.ht {
deny all;
}
}

主要是新增:index.php, server_domain_or_IP, location ~ \.php$ 區塊以及location ~ /\.ht區塊

新增完成之後,可以使用下面的指令來幫助我們檢查Nginx語法是否正確


sudo nginx -t

都設定完成沒有錯誤之後,我們可以重新啟動Nginx的服務。


sudo service nginx restart

接著我們可以新建立一個頁面在/var/www/html下面,名叫:info.php。


<?php

phpinfo();

拜訪網址,成功的話,就會看到下面的畫面了。

要記得一件事情,因為這是用來測試PHP有沒有安裝成功,所以記得測試完成沒有問題之後,把info.php給移除喔!

因為,這只是用來測試的,記得測試完成之後,要把這個檔案移除喔!

下一篇,我們來介紹:怎麼用Nginx來建立子網域。

參考資料

  1. how-to-install-linux-nginx-mysql-php-lemp-stack-in-ubuntu-16-04
  2. how-to-create-subdomain-with-nginx-server-in-the-same-droplet