茫茫網海中的冷日 - 對這文章發表回應
茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1671507 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_60D_00139.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

對這文章發表回應

發表限制: 非會員 可以發表

發表者: 冷日 發表時間: 2019/2/19 7:08:21

CentOS 7 安裝 Nginx、MySQL/MariaDB、PHP7,架設 LEMP 網頁伺服器筆記

本篇是我一邊測試一邊紀錄下來的筆記,所以只寫重點,請參考使用,不要用複製貼上的方式實作。

我把我在主機上的每個操作步驟都記錄下來給大家參考,請依照自己伺服器的狀況選擇需要執行的步驟。

修改主機名稱

在 Linode VPS 中剛安裝好的 CentOS Linux 需要先設定一下正確的主機名稱。先用 hostnamectl 指令查詢一下目前的主機名稱:

hostnamectl

   Static hostname: localhost.localdomain
Transient hostname: li1895-155.members.linode.com
Icon name: computer-vm
Chassis: vm
Machine ID: e0c9675cb81c416ebcfaa6be69b57691
Boot ID: 932741bb182d46119309ae15da825624
Virtualization: kvm
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 4.15.12-x86_64-linode105
Architecture: x86-64

設定正確的主機名稱:

sudo hostnamectl set-hostname YOUR_HOSTNAME

其中 YOUR_HOSTNAME 要換成自己的主機名稱。設定好之後,再查看一下設定值:

hostnamectl


建立有 sudo 權限的一般使用者帳號

CentOS Linux 預設只有 root 帳號,所以要建立一個可用 sudo 的一般使用者的帳號,平常使用這個帳號登入操作會比較方便,也比較安全:


# 新增使用者
adduser USERNAME
# 設定密碼
passwd USERNAME
# 將 USERNAME 加入 wheel 群組
usermod -aG wheel USERNAME

設定時區


檢查 CentOS Linux 的時間:

date
三  3月 28 10:49:30 UTC 2018

如果時間差很多(幾個小時),就代表系統的時區沒設定好。

使用 timedatectl 列出可選擇的時區:

timedatectl list-timezones

設定時區為亞洲的台北:

sudo timedatectl set-timezone Asia/Taipei

最後再確認一下時間是否正確:

date
三  3月 28 18:50:56 CST 2018

加強 SSH 安全性

設定好 SSH 的公開金鑰認證之後,編輯 /etc/ssh/sshd_config 這個 SSH 服務的設定檔,把密碼認證機制關閉,這樣就算密碼被駭客猜出來,也不會被入侵:

PasswordAuthentication no

禁止 root 管理者從遠端登入:

PermitRootLogin no

最後可以考慮更換連接埠:

Port 2222

重新啟動 SSH 服務:

sudo systemctl status sshd


更新系統套件

由於整個系統是剛裝好的,所以直接用 yum upgrade 更新一下:

sudo yum upgrade

updateupgrade 的差異可以參考 StackExchange

啟用 EPEL

有許多的套件只有 EPEL 中才有,所以一定要啟用:


sudo yum install epel-release
sudo yum update

安裝 Nginx


使用 yum 安裝 Nginx 伺服器:

sudo yum install nginx

啟動 Nginx 服務:

sudo systemctl start nginx

檢查 Nginx 是否正常啟動:

sudo systemctl status nginx

查看伺服器網頁,正常的話應該可看到這樣的畫面:

Nginx 預設畫面

永久啟用 Nginx 服務,讓重新開機後可自動啟動:

sudo systemctl enable nginx

安裝 MySQL/MariaDB

使用 yum 安裝 MariaDB:

yum install mariadb-server mariadb

啟動 MariaDB 服務,並設定開機自動啟動:


systemctl start mariadb
systemctl enable mariadb

強化 MySQL/MariaDB 資料庫設定的安全性:

mysql_secure_installation

安裝好 MariaDB 資料庫之後,檢查一下 /etc/my.cnf 設定檔,看看 bind-address 是否有指定為 127.0.0.1,如果沒有這行的話,就自己加上去:


[mysqld]
bind-address = 127.0.0.1

若沒有指定 bind-address 的話,MariaDB 預設會傾聽所有的 IP 位址,如果系統又沒有設定防火牆,就會有被攻擊的風險,所以這一行一定要加。

安裝 PHP 7

若要在 CentOS Linux 中安裝 PHP 7,大致上有兩種主要的方式,一種是 使用外部套件庫來直接安裝 PHP 7,但這種方式裝的套件並不是 RedHat 官方提供的,無法保證穩定性;另外一種是使用 CentOS 官方所提供的 SCL 環境來安裝 PHP 7,所有的套件都經過充分的測試,比較不會有系統不穩的問題。

這裡我們選擇使用 SCL 安裝 RedHat 官方的 PHP 7.1,首先安裝 SCL:

sudo yum install centos-release-scl

安裝 RedHat 官方提供的 PHP 7.1:

sudo yum install rh-php71 rh-php71-php-fpm rh-php71-php-mysqlnd

開啟 /etc/opt/rh/rh-php71/php-fpm.d/www.conf 設定檔,確認 listen 的設定:

9000

這裡 PHP-FPM 預設是使用 TCP 的方式,這部份要跟 Nginx 的設定吻合。若要改成 socks 方式亦可,只是必須注意要與 Nginx 的設定檔同步修改。

修改 usergroup,設定為 nginx


user = nginx
group = nginx

啟動 PHP-FPM 服務,並設定開機自動啟動:


sudo systemctl start rh-php71-php-fpm
sudo systemctl enable rh-php71-php-fpm

關於 CentOS 安裝 PHP 7 的方法,可以參考 CentOS WikiPHPerzh與知Software Collections

編輯 /etc/opt/rh/rh-php71/php.ini 設定檔,修正 cgi.fix_pathinfo 漏洞,將 cgi.fix_pathinfo 設為 0

0

設定 Nginx 與 PHP 7

設定 /etc/nginx/nginx.conf 設定檔,內容大致如下:


 {
80;
server_name your_server_name;

root /usr/share/nginx/html;
index.htm;
/ {
404;
}
404.html;
50x.html;
.html {
root /usr/share/nginx/html;
}
~ \.php$ {
404;
#fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
9000;
index.php;
$document_root$fastcgi_script_name;
include fastcgi_params;
}
}

其中 server_name 請自行修改,而 fastcgi_pass 要與 PHP-FPM 的設定吻合。

所有設定都調整好之後,重新啟動 PHP-FPM 與 Nginx 服務:


sudo systemctl restart rh-php71-php-fpm
sudo systemctl restart nginx

關於 Nginx 與 PHP 7 的設定方法,可以參考 簡書

測試 PHP 7

使用 phpinfo 寫一個測試的 PHP 指令稿,放在 /usr/share/nginx/html 目錄下測試看看 PHP 7 是否有正常執行:

?>

設置 Nginx Server Block

確認 PHP 7 與 Nginx 設置無誤後,參考 DigitalOcean 的文件,設置 Nginx 的 server block,先建立兩個目錄:


sudo mkdir /etc/nginx/sites-available
sudo mkdir /etc/nginx/sites-enabled

/etc/nginx/nginx.conf 中的 http {} 區塊結束前,加上兩行:


include /etc/nginx/sites-enabled/*.conf;
64;

這樣就可以將所有的網站設定檔放在 sites-available 目錄中,要啟用的設定檔則以連結的方式放在 sites-enabled 目錄,這樣會比較好管理。

設定 HTTPS 加密網頁

安裝 certbot

sudo yum install certbot-nginx

取得憑證:

sudo certbot --nginx

測試更新憑證:

sudo certbot renew --dry-run

若測試更新憑證沒問題,則加入 crontab,讓系統定自動定時更新憑證:


# certbot
certbot renew --quiet --no-self-upgrade --post-hook "/bin/systemctl reload nginx.service"

防火牆


正式服務的機器最好開啟防火牆,這部份請參考 CentOS Linux 的防火牆設置教學

參考資料: Hostinger


原文出處:CentOS 7 安裝 Nginx、MySQL/MariaDB、PHP7,架設 LEMP 網頁伺服器筆記 - G. T. Wang
內容圖示
url email imgsrc image code quote
樣本
bold italic underline linethrough   












 [詳情...]
validation picture

注意事項:
預覽不需輸入認證碼,僅真正發送文章時才會檢查驗證碼。
認證碼有效期10分鐘,若輸入資料超過10分鐘,請您備份內容後,重新整理本頁並貼回您的內容,再輸入驗證碼送出。

選項

Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|