[CentOS 7] 整合 Nginx、MariaDB、PHP 7 組成 LEMP Server

加入 EPEL 套件庫
sudo yum -y install epel-release

Remi 套件庫
sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

以及 Nginx 套件庫
sudo vi /etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

別忘了更新一下所有套件庫的快取資料。
sudo yum -y update

 

安裝主要套件

安裝的步驟也很簡單,全部交給 yum 指令來搞定就行了。
sudo yum -y install nginx php70-php-fpm mariadb-server

因為安裝的套件略多,這邊要稍等一下下 …

對,就是這麼簡單!
如果各位勇者有興趣自己編譯的話,原始碼在這裡請自便… XD。

 

開始設定及實測

 

Nginx

先允許防火牆讓 HTTP、HTTPS 封包通過。
sudo firewall-cmd –permanent –zone=public –add-service=http
sudo firewall-cmd –permanent –zone=public –add-service=https
sudo firewall-cmd –reload

直接啟動服務,並讓它在開機後自動啟動。
sudo systemctl restart nginx
sudo systemctl enable nginx

再修改預設主站台設定檔。
sudo vi /etc/nginx/conf.d/default.conf

改成下列內容,啟用 PHP 的支援。
server {
    listen       80;
    server_name  localhost;


    charset utf-8;
    access_log  /var/log/nginx/access.log  main;


    root   /usr/share/nginx/html;
    index  index.php index.html index.htm;


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


    error_page  404              /404.html;


    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }


    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

另外,因為 SELinux 會限制 Nginx 寫入動作,所以還要打開主目錄的存取權限。
sudo chcon -R -t httpd_sys_rw_content_t /usr/share/nginx/html

最後,讓新的設定值生效。
sudo systemctl reload nginx

在瀏覽器上就可以看到 Nginx 正常啟動了。

 

PHP-FPM

Nginx 跟 Apache 不同,必須配合 PHP-FPM 來啟用 PHP 的支援。

首先修改一下 PHP 的主設定檔。
sudo vi /etc/opt/remi/php70/php.ini

找到 ;cgi.fix_pathinfo=1,將 1 改成 0,並把註解拿掉。
cgi.fix_pathinfo=0

修改這個參數是因為有資安漏洞,請參閱 风雪之隅 – Nginx + PHP CGI的一个可能的安全漏洞

簡單的說,
就是因為 PHP 在解析路徑的時候,有機會被拿來執行那些偽裝成普通檔案的惡意程式碼。

接著,修改 PHP-FPM 的主設定檔。
sudo vi /etc/opt/remi/php70/php-fpm.d/www.conf

配合 Nginx 修改下列設定值。
user = nginx
group = nginx
listen.owner = nobody
listen.group = nobody

啟動 PHP-FPM,並讓它在開機後自動啟動。
sudo systemctl restart php70-php-fpm
sudo systemctl enable php70-php-fpm

測試的方法也很簡單,只要在預設站台的根目錄 /usr/share/nginx/html 下面,建立一個 PHP 檔案。
sudo vi /usr/share/nginx/html/info.php

就加入這一行指令即可。
<?php phpinfo(); ?>

不必重新啟動 Nginx 或是 PHP-FPM,直接打開瀏覽器,在網址列除了輸入 IP 之外,再加上 php 檔案名稱,例如 http://192.168.88.155/info.php,看到這個畫面就代表成功了。

 

MariaDB

啟動 MariaDB Server,並讓它在開機後自動啟動。
sudo systemctl restart mariadb
sudo systemctl enable mariadb

進行一些安全性的調整。
mysql_secure_installation

MariaDB 的 root 帳號,預設沒有密碼。

設定 root 帳號的新密碼,必須輸入兩次。

移除匿名帳號。

拒絕 root 帳號從遠端登入,這邊為了管理方便,所以選擇繼續允許。

刪除測試資料庫。

重新載入使用者權限。

完成之後,試著連線到 MariaDB Server,用 root 帳號的新密碼登入測試一下。
mysql -u root -p

此外,為了讓 PHP 可以連接 MariaDB,要再額外安裝 PHP 的模組。
sudo yum -y install php70-php-mysqlnd

裝好之後,重新啟動 PHP-FPM。
sudo systemctl restart php70-php-fpm

回到瀏覽器,重新載入剛剛的 PHP 測試頁,就會看到 MariaDB 的支援模組了。
(我們沒看錯,MySQL 跟 MariaDB 用同一個模組。)

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *