如何在VPS上搭建WordPress博客網站(史上最全圖文教程)

因爲如今不少人仍然使用共享主機,因此我決定寫這篇教程,教你如何設置本身的虛擬專用服務器(VPS),以便爲啓動一個 WordPress 網站準備好全部必要的服務。javascript

爲何共享託管不是最好的選擇?php

  • 你的 WordPress 網站必須與其餘用戶爭奪服務器資源;
  • 你沒法本身加速網站;
  • 你不能自定義一些安全策略。

共享主機爲你提供了一個基本的儀表盤,來對域名、網站、郵件等進行設置,提供這種服務的託管公司包括: WP Engine、Flywheel、SiteGround、Kinsta 等等,他們確保你的網站通過優化和更新,所以你能夠高枕無憂。css

可是,若是在 VPS 上搭建 WordPress 網站,那麼你能夠了解成功運行 WordPress 網站所需的整個流程。而後,你還能學到如何設置和優化,從 Linux(操做系統)到 Nginx(Web服務器)再到 FTP(以及更安全的SFTP)、SSH、數據庫等等,最後你將學習如何設置 HTTPS、優化資源和總體安全性。html

在 VPS 上啓動 WordPress 網站的 12 個步驟

一、註冊域名java

二、準備 SSH 和 SFTP 客戶端node

三、購買 VPSpython

四、配置域名 DNSmysql

五、鏈接 VPSnginx

六、安裝 WordPressweb

七、安裝 PHP

八、安裝 MySQL

九、安裝 Nginx

十、安裝 SSL 證書

十一、啓動 WordPress 網站

十二、最後的安全設置

一、註冊域名

爲了讓訪客更方便地找到和識別你的網站,你須要給網站綁定一個域名。我建議使用最受歡迎的GoDaddy 來註冊域名,這是全球最大的域名註冊商,目前管理着超過 7500 萬個域名。

註冊域名很簡單,可是要找到一個使人滿意的結果可能須要很長時間,若是你在這方面遇到了麻煩,請查看個人這篇文章:怎樣挑選域名

二、準備 SSH 和 SFTP 客戶端

爲了與 VPS 進行通訊,首先須要準備 SSH 和 SFTP 客戶端。SSH 客戶端能夠用來處理與 VPS 相關的全部工做,包括查看信息、系統升級、安裝軟件、安全配置、權限管理等等;SFTP 客戶端則主要用來上傳/下載目錄和文件。

2.一、SSH 客戶端

我推薦的 SSH 客戶端是 Termius ,這是一個跨平臺的軟件,能夠在 Windows、macOS、Linux、iOS、Android 系統中運行。轉到官方網站,註冊一個帳號便可無償使用:

這是一款廣受讚譽的跨平臺軟件,在各大應用商店都得到了極高的評價,高級版的價格爲 $6.99/月,或者 $59.88/年,提供更多功能,包括:

  • 多設備之間數據同步
  • SFTP
  • 密碼粘貼
  • 代碼自動完成
  • 代理轉發
  • 代碼片斷
  • 以及更多…

對於大部分人來講,免費版的功能已經綽綽有餘。但若是預算容許,那麼高級版會爲你節省大量敲鍵盤的時間。

2.二、SFTP 客戶端

SFTP 客戶端我建議使用免費開源的 FileZilla ,這也是一款跨平臺軟件,兼容 Windows、macOS、Linux 系統,或者你也能夠下載源代碼,自行編譯安裝。

請將 Termius 和 FileZilla 安裝在本身的電腦中,咱們進入下一步。

三、購買 VPS

市場上充斥着大量的 VPS 託管商,爲了讓你的選擇變得更加簡單,我已經挑選出了一些最好的選項,其中 HostwindsVultr 支持支付寶付款。

在這篇文章中,我以 Hostwinds 爲例,轉到 官方網站,查看他們提供的非管理型 VPS 託管套餐:

最便宜的計劃只需 $4.49/月,但須要注意的是,這是首次購買價格,續費價格稍微要貴一些,爲 $4.99/月,不過這仍然很是便宜。咱們選擇最便宜的套餐,而後點擊綠色的 ORDER 按鈕註冊帳號:

Hostwinds 提供 30 天退款保證,並承諾高達 99.9999% 的正常運行時間。輸入姓名、郵箱和密碼以後,點擊 Submit 按鈕完成註冊,這時候會轉到訂單確認頁面

請根據本身的實際狀況進行填寫,主要注意如下幾個地方:

  • Country:國家,中國大陸用戶選擇 China
  • Operating System:操做系統,選擇 CentOS 7
  • Payment Information:付款方式,根據本身的須要進行選擇,值得一提的是,你可使用支付寶付款
  • 默認勾上的附加服務,所有取消勾選

確認全部信息填寫正確以後,勾上頁面底部的 I have read and agree to the Terms of Service and Privacy Policy,而後點擊 Complete Order 按鈕完成付款,成功以後的頁面是這樣的:

點擊 Continue To Client Area 按鈕進入儀表盤:

儀表盤首頁列出了剛纔購買的 VPS,點擊列表右側的 Manage 按鈕能夠查看詳細信息。這個時候,你應該收到了 Hostwinds 發送的歡迎郵件,裏面也列出了 VPS 的詳細信息。以下圖所示,左側是儀表盤信息,右側是郵件內容:

從圖中咱們能夠看到,VPS 的 IP 地址是 23.254.164.198,如今咱們使用 Ping 命令檢測這個 IP 地址可以連通:

按住 Windows + R 鍵調出運行命令,而後輸入 cmd:

按回車鍵,在彈出的命令行窗口中輸入如下命令:

ping 23.254.164.198
複製代碼

如圖所示,結果中出現 來自 23.254.164.198 的回覆 信息表示網絡沒有問題,少許的 請求超時 並無什麼大礙。

若是IP地址沒法連通,那麼你能夠在 Hostwinds 的控制面板中更換 IP:

四、配置域名 DNS

你能夠在 Hostwinds 儀表盤或歡迎郵件中找到域名的 Nameserver 信息,例如,個人兩個Nameserver 分別是:

  • mdns7.hostwindsdns.com
  • mdns8.hostwindsdns.com

如今,咱們轉到域名註冊商處修改 DNS,若是你在我推薦的 GoDaddy 註冊了域名,那麼請打開菜單 主頁 → 域名

找到你要修改的域名,點擊旁邊的 …,而後在彈出菜單中選擇 管理 DNS

域名服務器類型改爲自定義,而後按照 Hostwinds 提供的 Nameserver 來配置 DNS:

確認無誤以後,點擊 保存 按鈕。而後轉到 Hostwinds 儀表盤,點擊菜單 Domains → Manage DNS:

在新打開的頁面中,點擊屏幕底部的 + Domain 按鈕:

輸入你註冊的域名,在這個示例中,咱們使用 xiaobei-demo.com,添加完以後,狀態顯示爲 Pending。不要擔憂,這是由於修改域名 DNS 以後,須要一段時間才能正式生效,通常幾個小時便可,最長不會超過 48 小時。若是你比較着急,能夠選擇域名列表右側的 Action 菜單,點擊 Check 按鈕來檢查一下:

幸運的話,DNS 記錄可能已經生效,域名狀態也變成 Active。咱們繼續選擇域名列表右側的 Action 菜單,點擊 Record 按鈕進行一些設置:

只須要輸入兩條記錄便可,以下圖所示:

完成以後,你的頁面應該相似於這樣:

如今,咱們已經設置好了 DNS,域名和 IP 地址的對應關係也已經創建。須要注意的是,這個設置須要一段時間才能正式生效。接下來,咱們將遠程鏈接到 VPS,安裝一些特定的軟件以啓動網站。

五、鏈接 VPS

首先獲取 VPS 的鏈接信息,你能夠在 Hostwinds 發送的郵件中找到:

或者 Hostwinds 的儀表盤中:

打開咱們前面第二步安裝的 SSH 客戶端 Termius,選擇菜單 Hosts,而後點擊 NEW HOST 按鈕以添加主機:

在新打開的側邊欄中,須要填寫如下信息:

  • Label:主機名稱,能夠隨便填寫,咱們填寫的是 Hostwinds
  • Address:主機IP地址,咱們的是 23.254.164.198
  • SSH開關:打開
  • Username:SSH 用戶名,填寫 root
  • Password:SSH 密碼,咱們的是 mCcV7DUEPMN8

填寫完成,並保存以後,雙擊便可鏈接。首次鏈接時,Termius 會彈出確認提示框,點擊 Yes 便可。

而後就與 VPS 鏈接成功:

如今,咱們打開 SFTP 客戶端 FileZilla,點擊左上角的 站點管理器 圖標來添加主機:

按照下圖所示進行填寫:

填寫完成以後點擊 鏈接 按鈕,這時候 FileZilla 會彈出確認提示框,點擊確認,而後與 VPS 鏈接成功。下圖左側是本地電腦的目錄結構,右側是 VPS 的目錄結構:

六、安裝WordPress

如今,咱們已經與 VPS 創建了鏈接。因爲託管商提供的主機系統很是精簡,缺乏不少應用程序,因此咱們先要安裝一些基礎框架,以便後續程序可以良好運行。

轉到 Termius,輸入如下命令安裝基礎框架。

yum -y install pcre-devel zlib-devel flex bison ncurses libncurses-dev ncurses-devel mysql-devel gdb wget gcc unzip patch libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel mysql pcre-devel curl-devel libxslt-devel openssl openssl-devel
複製代碼

你能夠直接複製粘貼,在 Termius 中是這樣的:

輸入完以後按回車鍵,VPS 會自動下載/更新基礎框架,這個過程可能須要幾分鐘,完成以後的界面是這樣的:

接下來,咱們在根目錄建立一個文件夾 /wordpress,執行如下命令:

mkdir /wordpress
複製代碼

或者,你能夠轉到 FileZilla,切換到根目錄下,直接右鍵,點擊建立目錄:

建立完成以後,咱們能夠經過 FileZilla 看到新增的目錄,若是你沒有看到,那麼請右鍵點擊刷新:

回到 Termius,咱們執行命令進入目錄 /wordpress 中:

cd /wordpress
複製代碼

如今咱們要下載 WordPress,打開官方網站,查看下面 .tar.gz 文件的下載連接:wordpress.org/latest.tar.…

在 Termius 中執行如下命令:

wget https://wordpress.org/latest.tar.gz
複製代碼

如今你的 Termius 應該相似於這樣:

輸入完命令以後,按回車鍵,通常幾秒鐘就能夠下載完成。這是一個壓縮包,如今執行如下命令將其解壓:

tar zxvf latest.tar.gz
複製代碼

如今你的 Termius 應該相似於這樣:

解壓很快就能夠完成,咱們如今獲得了一個 wordpress 文件夾,執行如下命令將其重命名爲 xiaobei-demo.com(你修改爲本身的域名):

mv wordpress xiaobei-demo.com
複製代碼

如今你的 Termius 應該相似於這樣:

轉到 FileZilla,咱們能夠直觀地查看一下目錄結構:

到這一步,WordPress 已經安裝完成了,可是如今還沒法運行。爲了使其運行,咱們還要安裝 PHP 環境。

七、安裝 PHP

打開 PHP 官方網站: php.net/

咱們看到最新的版本是 7.3.2,但在咱們的測試中,這個版本有點問題,因此選擇更爲穩定的 7.2.15。轉到 Termius,執行如下命令切換到 /wordpress 目錄,而後下載 PHP:

cd /wordpress
wget http://php.net/distributions/php-7.2.15.tar.gz
複製代碼

解壓文件,而後切換到 /wordpress/php-7.2.15 目錄:

tar zxvf php-7.2.15.tar.gz
cd php-7.2.15
複製代碼

因爲咱們下載的是源代碼文件,因此須要進行編譯安裝,下面的命令是在安裝以前作一些檢查。須要注意的是,這實際上是一條命令,你應該所有複製下來,而後粘貼到 Termius 上執行:

./configure --prefix=/usr/local/php \
 --with-curl \
 --with-freetype-dir \
 --with-gd \
 --with-gettext \
 --with-iconv-dir \
 --with-kerberos \
 --with-libdir=lib64 \
 --with-libxml-dir \
 --with-mysqli \
 --with-openssl \
 --with-pcre-regex \
 --with-pdo-mysql \
 --with-pdo-sqlite \
 --with-pear \
 --with-png-dir \
 --with-xmlrpc \
 --with-xsl \
 --with-zlib \
 --enable-fpm \
 --enable-bcmath \
 --enable-libxml \
 --enable-inline-optimization \
 --enable-gd-native-ttf \
 --enable-mbregex \
 --enable-mbstring \
 --enable-opcache \
 --enable-pcntl \
 --enable-shmop \
 --enable-soap \
 --enable-sockets \
 --enable-sysvsem \
 --enable-xml \
 --enable-zip
複製代碼

大約一分鐘以後,./configure 命令執行完畢,成功以後的界面應該是這樣的,會打印出 License 信息:

如今咱們開始安裝 PHP,這個過程須要很長時間,可能會超過 10 分鐘,請耐心等待。執行如下命令安裝:

make && make install
複製代碼

在安裝的過程當中,你極可能會遇到下面的錯誤:

請不要擔憂,這個錯誤是指系統的內存不足。出現這個問題其實很好理解,由於前面咱們購買的是最便宜的 VPS,內存一共只有 1GB,編譯安裝PHP是一件對內存消耗很大的任務。解決這個問題很簡單,只須要增長一些虛擬內存便可,執行如下命令查看系統的虛擬內存:

free -m

複製代碼

從圖中能夠看到,咱們的虛擬內存(Swap)是 0:

執行下面4條命令來建立1GB的虛擬內存:

fallocate -l 1G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
複製代碼

對於大部分 CentOS 7 系統來講,這個增長虛擬內存的命令都能執行成功。可是,仍然有些架構不同的 VPS 可能執行失敗,出現下面這樣的錯誤:

若是不幸你也遇到了這個錯誤,那麼只需執行下面的命令來從新建立:

dd if=/dev/zero of=/swapfile count=1024 bs=1MiB
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
複製代碼

執行成功以後的界面應該以下所示:

再次執行下面的命令查看系統內存:

free -m
複製代碼

能夠看到,咱們已經成功建立了 1GB 的虛擬內存(Swap):

接下來,咱們繼續安裝 PHP,首先進入目錄 /wordpress/php-7.2.15,而後執行安裝操做。如今,你能夠放心地休息一下,或者去喝杯茶了,由於安裝過程一般會超過 10 分鐘 ?

cd /wordpress/php-7.2.15
make && make install
複製代碼

通過漫長的等待以後,PHP 終於安裝好了,安裝成功的界面應該是這樣的:

執行下面幾條命令,將 PHP 的配置文件拷貝到系統目錄中:

cp php.ini-development /usr/local/php/lib/php.ini
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
複製代碼

如今,咱們要將 PHP 添加到全局環境變量中,執行下面的命令修改 /etc/profile 文件:

vi /etc/profile
複製代碼

注意將輸入法切換爲英文,而後按住鍵盤上的 ↓(或Shift+G)鍵滾動到文件底部,而後按 i 鍵進入編輯狀態,在文件最後面追加如下內容:

export PATH="/usr/local/php/bin:$PATH"
複製代碼

這時候你的SSH界面看起來應該是這樣的:

再按鍵盤上的 Esc 鍵退出編輯模式,而後輸入如下命令保存文件:

:wq
複製代碼

SSH 界面示例:

執行命令使得剛纔的配置生效:

source /etc/profile
複製代碼

如今 PHP 已經安裝成功,而且配置完畢,執行下面的命令就能夠將其啓動:

sudo /usr/local/php/sbin/php-fpm
複製代碼

PHP 啓動以後會在後臺運行,並佔用 9000 端口,咱們輸入下面的命令來確認一下:

netstat -ant | grep 9000
複製代碼

從下圖能夠看到,9000 端口確實在使用中,這說明 PHP 運行正常:

如今,PHP 已經順利啓動,但咱們還差一個步驟,那就是讓它開機自動運行。首先輸入如下命令來編輯 /etc/rc.local 文件:

vi /etc/rc.local
複製代碼

在文件末尾添加 PHP 的啓動命令:

sudo /usr/local/php/sbin/php-fpm
複製代碼

SSH 界面示例:

完成以後,按鍵盤上的 Esc 鍵退出編輯模式,而後輸入如下命令保存文件:

:wq
複製代碼

最後一步,執行下面的命令使得 /etc/rc.local 擁有執行權限:

chmod +x /etc/rc.local
複製代碼

這是一項艱鉅的任務,很高興你已經順利完成。接下來,咱們將安裝 MySQL 數據庫,這是 WordPress 網站存儲數據的地方。

八、安裝 MySQL

打開MySQL官方網站,滾動到頁面下方,查看倉庫中的最新版本:

你能夠點擊列表右側的 Download 按鈕來得到下載連接,但這須要註冊帳號並登陸。實際上,還有一種更簡單的方法,上圖中最新的rpm文件是 mysql80-community-release-el7-2.noarch.rpm,按照以往的經驗,這個文件的下載連接應該就是:dev.mysql.com/get/mysql80…

依次執行下面的 4 條命令,注意:# 符號表示這一行是解釋說明,不是命令語句:

# 進入 /wordpress 目錄
cd /wordpress

# 下載mysql源安裝包
wget https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm

# 安裝mysql源
yum -y localinstall mysql80-community-release-el7-2.noarch.rpm

# 安裝MySQL
yum -y install mysql-community-server
複製代碼

大概幾分鐘以後,MySQL 就安裝好了,SSH 界面應該相似於這樣:

執行下面的 3 條命令,讓 MySQL 能夠開機啓動,並當即啓動 MySQL 服務:

# 開機啓動
systemctl enable mysqld
systemctl daemon-reload

# 啓動MySQL服務
systemctl start mysqld
複製代碼

MySQL 已經啓動,而且生成了一個超級用戶 root(以及臨時密碼),咱們須要使用 root 用戶登陸數據庫,以便作一些操做。臨時密碼在日誌文件中,咱們能夠執行下面的命令查看文件最後 50 行,來得到臨時密碼:

tail -n 50 /var/log/mysqld.log
複製代碼

SSH界面示例:

從上圖能夠看到,root 用戶的臨時密碼是 /fSi(UG?J0rh,咱們使用這個密碼登陸數據庫,執行下面的命令:

mysql -u root -p
複製代碼

這時候會要求輸入密碼,你能夠直接複製並粘貼上去,爲了安全起見,密碼並不會在SSH控制檯顯示出來。成功登陸以後,SSH 界面應該是這樣的,MySQL 服務端的版本爲 8.0.15:

接下來,咱們須要修改登陸密碼,並建立一個數據庫,用來存放網站的數據。須要注意的是,MySQL 對密碼的安全性要求很高,你不能隨便設置一個過於簡單的密碼,有一個比較簡單的解決辦法:你只需在臨時密碼後面加幾個字母。例如,咱們將把新密碼設置爲 /fSi(UG?J0rhABC

# 選擇數據庫
use mysql;

# 將root用戶的密碼設置爲 /fSi(UG?J0rhABC
alter user 'root'@'localhost' identified by '/fSi(UG?J0rhABC' password expire never;
alter user 'root'@'localhost' identified with mysql_native_password by '/fSi(UG?J0rhABC'; 

# 修改root能夠遠程訪問
create user 'root'@'%' identified by '/fSi(UG?J0rhABC' password expire never;
alter user 'root'@'%' identified with mysql_native_password by '/fSi(UG?J0rhABC'; 
 
# 刷新用戶權限
flush privileges;

# 建立數據庫,使用域名爲數據庫的名稱
create database `xiaobei-demo.com` default character set = utf8;

# 退出MySQL
quit;
複製代碼

如今,MySQL 已經安裝成功,用戶和數據庫也設置完畢。爲了啓動 WordPress 網站,如今還差最後一步,那就是安裝反向代理 Nginx,咱們繼續前進吧!

九、安裝 Nginx

打開 Nginx 官方網站,找到最新的穩定版本,目前是 1.14.2:

安裝 Nginx 很容易,執行下面幾條命令便可:

# /wordpress 目錄
cd /wordpress

# 建立待用目錄
mkdir /opt/nginx

# 下載nginx源代碼
wget http://nginx.org/download/nginx-1.14.2.tar.gz

# 解壓並進入解壓後的目錄
tar zxvf nginx-1.14.2.tar.gz
cd nginx-1.14.2

# 編譯
./configure --prefix=/opt/nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_ssl_module

# 安裝
make && make install
複製代碼

等待 1-2 分鐘以後,Nginx 安裝完成,這時你的 SSH 終端應該相似於這樣:

Nginx 已經安裝完成,接下來,咱們要修改默認的配置文件 /opt/nginx/conf/nginx.conf。因爲修改的地方比較多,因此咱們建議經過 FileZilla 將服務器上的文件下載到本地,修改完成以後再上傳到 VPS 上面:

請將 nginx.conf 文件修改爲下面這樣,或者 點擊這裏(nginx-1.conf)下載咱們的示例文件:

# 這一行是註釋,請將文件中的xiaobei-demo.com修改爲你本身的域名
worker_processes     1;

events {
  worker_connections 1024;
}

http {
  include      mime.types;
  default_type application/octet-stream;

  client_header_buffer_size     128k;
  client_max_body_size          50m;
  large_client_header_buffers   4 128k;
  server_names_hash_bucket_size 128;

  sendfile          on;
  keepalive_timeout 60;
  tcp_nodelay       on;
  tcp_nopush        on;

  fastcgi_buffer_size          64k;
  fastcgi_buffers              4 64k;
  fastcgi_busy_buffers_size    128k;
  fastcgi_connect_timeout      300;
  fastcgi_read_timeout         300;
  fastcgi_send_timeout         300;
  fastcgi_temp_file_write_size 128k;
  fastcgi_intercept_errors     on;

  gzip on;
  gzip_buffers    4 16k;
  gzip_comp_level 2;
  gzip_disable    "MSIE [1-6]\.";
  gzip_min_length 1k;
  gzip_types      text/plain text/css text/javascript application/x-httpd-php image/jpeg image/gif image/png;
  gzip_vary       off;

  server {
​    listen 80;
​    server_name www.xiaobei-demo.com xiaobei-demo.com;
​    root /wordpress/xiaobei-demo.com/;
​    index index.php;
​    charset utf-8;

​    location ~ /.well-known {
​      allow all;
​    }

​    location ~* .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|json|css|ttf|woff|woff2|eot|svg|flv|swf|map|xsl|zip)${
​      add_header Access-Control-Allow-Origin *;
​      expires max;
​    }

​    location / {
​      fastcgi_pass  127.0.0.1:9000;
​      fastcgi_index index.php;
​      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
​      include       fastcgi_params;
​      try_files     $uri $uri/ /index.php?$args;
​    }
  }
}
複製代碼

修改完成以後,將文件上傳到 VPS,而後執行下面的命令啓動 Nginx:

sudo /opt/nginx/sbin/nginx
複製代碼

與前面介紹的 PHP 同樣,咱們須要讓 Nginx 開機自動啓動。爲此,只須要編輯 /etc/rc.local 文件,在末尾新起一行,而後添加 sudo /opt/nginx/sbin/nginx 便可,完成以後文件內容應該像下面這樣:

如今咱們打開瀏覽器,輸入網址 xiaobei-demo.com,將會看到使人欣慰的頁面:

在作完這麼多工做以後,咱們終於看到了一絲曙光。可是請不要着急,由於你的網站如今使用不安全的 HTTP 協議,咱們須要將其修改爲 HTTPS。

十、安裝 SSL 證書

咱們使用 Let’s Encrypt 提供的免費 SSL 證書,只需執行下面幾條命令:

# 進入 /wordpress 目錄
cd /wordpress

# 安裝 certbot
yum -y install certbot

# 獲取證書,請把域名和郵箱修改爲你本身的
certbot certonly --webroot -w /wordpress/xiaobei-demo.com -d xiaobei-demo.com -d www.xiaobei-demo.com --agree-tos -m example@xiaobei.com --agree-tos

# 在安裝過程當中,會詢問你是否願意公開本身的郵件地址,輸入Y,而後按回車便可
複製代碼

證書如今已經獲取成功,存放在目錄 /etc/letsencrypt/live/ 中,你的 SSH 控制檯看起來應該像下面這樣:

若是你不幸遇到了下面的錯誤,請不要擔憂,這只是域名 DNS 沒有生效而已,只需等幾個小時再來獲取 SSL 證書就能夠了:

如今咱們已經擁有 SSL 證書,接下來對 /opt/nginx/conf/nginx.conf 配置文件作一些調整,如今你有兩種選擇:

二者的區別在於網站連接是否以 www 開頭,nginx.conf 的文件內容稍微有點不一樣:

xiaobei-demo.com 做爲網站首頁

請將 nginx.conf 文件修改爲下面這樣:

# 這一行是註釋,請將文件中的xiaobei-demo.com修改爲你本身的域名

worker_processes     1;

events {
  worker_connections 1024;
}

http {
  include      mime.types;
  default_type application/octet-stream;

  client_header_buffer_size     128k;
  client_max_body_size          50m;
  large_client_header_buffers   4 128k;
  server_names_hash_bucket_size 128;

  sendfile          on;
  keepalive_timeout 60;
  tcp_nodelay       on;
  tcp_nopush        on;

  fastcgi_buffer_size          64k;
  fastcgi_buffers              4 64k;
  fastcgi_busy_buffers_size    128k;
  fastcgi_connect_timeout      300;
  fastcgi_read_timeout         300;
  fastcgi_send_timeout         300;
  fastcgi_temp_file_write_size 128k;
  fastcgi_intercept_errors     on;
​    
  gzip on;
  gzip_buffers    4 16k;
  gzip_comp_level 2;
  gzip_disable    "MSIE [1-6]\.";
  gzip_min_length 1k;
  gzip_types      text/plain text/css text/javascript application/x-httpd-php image/jpeg image/gif image/png;
  gzip_vary       off;

  server {
​    listen 80;
​    server_name www.xiaobei-demo.com xiaobei-demo.com;
​    rewrite ^ https://xiaobei-demo.com$request_uri permanent;
  }

  server {
​    listen 443 ssl;
​    server_name www.xiaobei-demo.com;
​    
​    ssl on;
​    ssl_certificate /etc/letsencrypt/live/xiaobei-demo.com/fullchain.pem;
​    ssl_certificate_key /etc/letsencrypt/live/xiaobei-demo.com/privkey.pem;
​    ssl_ciphers "CHACHA20:GCM:HIGH:!DH:!RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS";
​    ssl_session_cache shared:SSL:10m;
​    ssl_session_timeout 10m;
​  
​    rewrite ^ https://xiaobei-demo.com$request_uri permanent;
  }


  server {
​    listen 443 ssl;
​    server_name xiaobei-demo.com;
​    root /wordpress/xiaobei-demo.com/;
​    index index.php;
​    charset utf-8;
​    
​    ssl on;
​    ssl_certificate /etc/letsencrypt/live/xiaobei-demo.com/fullchain.pem;
​    ssl_certificate_key /etc/letsencrypt/live/xiaobei-demo.com/privkey.pem;
​    ssl_ciphers "CHACHA20:GCM:HIGH:!DH:!RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS";
​    ssl_session_cache shared:SSL:10m;
​    ssl_session_timeout 10m;

​    location ~ /.well-known {
​      allow all;
​    }

​(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|json|css|ttf|woff|woff2|eot|svg|flv|swf|map|xsl|zip)${
​      add_header Access-Control-Allow-Origin *;
​      expires max;
​    }

​    location / {
​      fastcgi_pass  127.0.0.1:9000;
​      fastcgi_index index.php;
​      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
​      include       fastcgi_params;
​      try_files     $uri $uri/ /index.php?$args;
​    }
  }
} 
複製代碼

www.xiaobei-demo.com 做爲網站首頁

請將 nginx.conf 文件修改爲下面這樣:

# 這一行是註釋,請將文件中的xiaobei-demo.com修改爲你本身的域名

worker_processes     1;

events {
  worker_connections 1024;
}

http {
  include      mime.types;
  default_type application/octet-stream;

  client_header_buffer_size     128k;
  client_max_body_size          50m;
  large_client_header_buffers   4 128k;
  server_names_hash_bucket_size 128;

  sendfile          on;
  keepalive_timeout 60;
  tcp_nodelay       on;
  tcp_nopush        on;

  fastcgi_buffer_size          64k;
  fastcgi_buffers              4 64k;
  fastcgi_busy_buffers_size    128k;
  fastcgi_connect_timeout      300;
  fastcgi_read_timeout         300;
  fastcgi_send_timeout         300;
  fastcgi_temp_file_write_size 128k;
  fastcgi_intercept_errors     on;
​   
  gzip on;
  gzip_buffers    4 16k;
  gzip_comp_level 2;
  gzip_disable    "MSIE [1-6]\.";
  gzip_min_length 1k;
  gzip_types      text/plain text/css text/javascript application/x-httpd-php image/jpeg image/gif image/png;
  gzip_vary       off;

  server {
​    listen 80;
​    server_name www.xiaobei-demo.com xiaobei-demo.com;
​    rewrite ^ https://www.xiaobei-demo.com$request_uri permanent;
  }

  server {
​    listen 443 ssl;
​    server_name xiaobei-demo.com;
​ 
​    ssl on;
​    ssl_certificate /etc/letsencrypt/live/xiaobei-demo.com/fullchain.pem;
​    ssl_certificate_key /etc/letsencrypt/live/xiaobei-demo.com/privkey.pem;
​    ssl_ciphers "CHACHA20:GCM:HIGH:!DH:!RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS";
​    ssl_session_cache shared:SSL:10m;
​    ssl_session_timeout 10m;
​    
​    rewrite ^ https://www.xiaobei-demo.com$request_uri permanent;
  }

  server {
​    listen 443 ssl;
​    server_name www.xiaobei-demo.com;
​    root /wordpress/xiaobei-demo.com/;
​    index index.php;
​    charset utf-8;
​    
​    ssl on;
​    ssl_certificate /etc/letsencrypt/live/xiaobei-demo.com/fullchain.pem;
​    ssl_certificate_key /etc/letsencrypt/live/xiaobei-demo.com/privkey.pem;
​    ssl_ciphers "CHACHA20:GCM:HIGH:!DH:!RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS";
​    ssl_session_cache shared:SSL:10m;
​    ssl_session_timeout 10m;

​    location ~ /.well-known {
​      allow all;
​    }

(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|json|css|ttf|woff|woff2|eot|svg|flv|swf|map|xsl|zip)${
​      add_header Access-Control-Allow-Origin *;
​      expires max;
​    }

​    location / {
​      fastcgi_pass  127.0.0.1:9000;
​      fastcgi_index index.php;
​      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
​      include       fastcgi_params;
​      try_files     $uri $uri/ /index.php?$args;
​    }
  }
}
複製代碼

修改完成以後,執行如下命令應用新的配置文件:

/opt/nginx/sbin/nginx -s reload
複製代碼

在這篇文章中,咱們使用 xiaobei-demo.com 做爲網站首頁,在瀏覽器中輸入 xiaobei-demo.com,而後按回車,網址會自動跳轉到 HTTPS 協議:

前期工做已經所有準備完成,接下來咱們開始啓動 WordPress 網站。但還有一件事須要注意, Let’s Encrypt 提供的免費 SSL 證書有效期只有 90 天,在證書到期以前,你須要對其進行更新,這個操做很簡單,只需執行一條命令:

certbot renew --force-renew
複製代碼

更新完成以後,再讓 Nginx 應用新的證書便可,執行如下命令:

/opt/nginx/sbin/nginx -s reload
複製代碼

十一、啓動 WordPress 網站

終於到了最後一步,請在瀏覽器中輸入你的域名,選擇你喜歡的網站語言(咱們以簡體中文爲例),而後點擊 繼續 按鈕進入下一步。你會看到一個提示頁面,須要準備數據庫鏈接信息:

若是你找不到數據庫鏈接信息,請查看前面的安裝 MySQL 小節,請按照下面所示輸入相關信息:

數據庫名 xiaobei-demo.com

用戶名 root

密碼 /fSi(UG?J0rhABC

數據庫主機 127.0.0.1

表前綴 wp_

確認無誤後,點擊 提交 按鈕。

若是信息所有正確,你將會看到下面這個頁面:

點擊 如今安裝 按鈕,在下一個頁面中輸入網站的一些必要信息:

上圖是一些必要的信息,其中密碼已經自動生成好。

  • 站點標題:這個至關於網站名稱,例如咱們的站點標題是十佳評測,這個之後能夠隨時修改;
  • 用戶名和密碼:用於登陸網站的管理後臺,用戶名沒法修改,密碼之後能夠修改;
  • 你的電子郵件:用於接收網站的相關信息,例如核心更新、訪客留言等等;
  • 對搜索引擎的可見性:若是你如今不但願本身的網站出如今谷歌、百度或搜狗的搜索結果中,那麼請勾選這個選項。不要擔憂,這個之後能夠隨時修改。

確保已經將密碼保存在安全的地方,而後點擊 安裝WordPress 按鈕,你將會看到使人欣慰的成功頁面:

點擊 登陸 按鈕,進入網站後臺的登陸頁面:

輸入剛纔設定好的用戶名和密碼,而後點擊登陸 按鈕,將會進入網站的管理後臺:

在瀏覽器中輸入你的域名,將會看到一個全新的外觀:

如今,你的網站已經正式上線了,你能夠在管理後臺撰寫文章、上傳圖片、更新主題、設計頁面等等,不少工做都在等着你。

十二、最後的安全設置

這一步並非必須的,但可讓你的 VPS 和網站更加安全,若是你對此有興趣,請繼續閱讀。

12.一、修改 SSH 端口

當你經過SSH客戶端與 VPS 創建鏈接時,極可能會看到相似下面的提示:

這段話的意思是有人嘗試經過 SSH 登陸你的 VPS,而且已經登陸失敗了 3134 次,通常都是網上的自動程序發起的暴力破解。

爲了下降被破解的次數,咱們能夠修改 SSH 的默認登陸端口,爲此須要編輯 /etc/ssh/sshd_config 文件,因爲這個文件較大,因此咱們建議下載到本地進行修改。大約在第17行,去掉前面的 # 符號,而後將默認的端口22修改成2200:

修改完成以後,將文件上傳到 VPS 中,而後執行下面的命令使其生效,並重啓 SSH 服務:

yum -y install policycoreutils-python.x86_64
semanage port -a -t ssh_port_t -p tcp 2200
systemctl restart sshd
複製代碼

注意,之後你登陸 VPS 時,須要使用 2200 端口。

12.二、配置防火牆

各個 VPS 託管商對系統防火牆的處理通常分爲如下三種:

  • 在系統中沒有預裝防火牆
  • 在系統中預裝了防火牆,但沒有啓動
  • 在系統中預裝了防火牆,而且隨系統自動啓動

不管哪一種方式,你均可以執行下面幾條命令:

# 安裝防火牆,若是系統中已存在,那就會執行更新
yum -y install firewalld

# 開機啓動防火牆
systemctl enable firewalld

# 當即啓動防火牆
systemctl restart dbus
systemctl restart firewalld

# 查看防火牆的狀態
systemctl status firewalld

# 打開2200(SSH)、80(HTTP)、443(HTTPS)端口
firewall-cmd --zone=public --add-port=2200/tcp --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent

# 更新防火牆規則
firewall-cmd --complete-reload

# 查看全部打開的端口和服務
firewall-cmd --zone=public --list-ports
firewall-cmd --list-services
複製代碼

防火牆已經安裝並配置完畢,你的 SSH 控制檯看起來應該是這樣的:

12.三、封禁嘗試破解密碼的 IP

前面咱們已經修改了 SSH 的登陸端口,事實上,還有一種更安全的方法,那就是將失敗次數達到 5 次(你能夠修改這個數字)的 IP 進行封禁。

首先,在本地建立一個名爲 secure_ssh.sh 的文件,輸入如下內容:

#!/bin/sh
cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' > /wordpress/log/secure_ssh_black.txt
for i in `cat /wordpress/log/secure_ssh_black.txt`
do
  IP=`echo $i |awk -F= '{print $1}'`
  NUM=`echo $i|awk -F= '{print $2}'`
  if [ $NUM -ge 3 ]; then
​    grep $IP /etc/hosts.deny > /dev/null
​    if [ $? -gt 0 ] && [ $IP != "session:" ]; thenecho "sshd:$IP:deny" >> /etc/hosts.deny
​    fi
  fi
done
複製代碼

而後,將本地的 secure_ssh.sh 的文件上傳到 VPS 上的 /wordpress 目錄中。注意,因爲咱們已經修改了 SSH 端口,因此你須要在 FileZilla 客戶端中修改 VPS 的配置。上傳成功以後,你的目錄結構應該相似於這樣:

轉到SSH控制檯,執行如下命令:

# 建立日誌目錄
mkdir /wordpress/log

# 給secure_ssh.sh添加執行權限
chmod +x /wordpress/secure_ssh.sh
複製代碼

建立一個定時任務,讓 secure_ssh.sh 每分鐘執行一次,輸入如下命令:

crontab -e
複製代碼

注意將輸入法切換爲英文,按 i 鍵進入編輯模式,而後輸入如下內容:

*/1 * * * * sh /wordpress/secure_ssh.sh
複製代碼

再按 Esc 鍵退出編輯模式,輸入命令

:wq
複製代碼

保存並退出。這時候你的 SSH 控制檯看起來應該像這樣:

等幾分鐘以後,查看 VPS 上的 /etc/hosts.deny 文件,會看到有不少 IP 地址已被封禁。你既能夠經過 FileZilla 將文件下載到本地,也可使用下面這條命令來查看:

tail -f /etc/hosts.deny

# 按 Ctrl+C 能夠退出查看模式
複製代碼

SSH 界面示例:

12.四、提高網站安全性

HTTP 協議有 9 種方法:

  • HEAD:請求指定的資源,但服務器不會返回內容部分,一般用於檢查網站是否正常在線;
  • GET:請求指定的資源,服務器會返回內容部分,當訪客瀏覽你的網站時,將經過這個方法得到頁面內容;
  • POST:向指定資源提交數據,請求服務器進行處理,一般用於數據提交、文件上傳等等;
  • PUT:向服務器上傳最新內容,黑客喜歡用這個方法上傳腳本文件;
  • DELETE:刪除服務器上的指定內容,也是黑客喜歡的方法;
  • CONNECT:一般用於 SSL 加密服務器的連接與非加密的 HTTP 代理服務器的通訊,不多使用;
  • OPTIONS:與 HEAD 相似,通常用於查看服務器的性能,但黑客喜歡執行一些破壞操做;
  • TRACE:主要用於 HTTP 請求的測試或診斷;
  • PATCH:與 PUT 請求相似,用於資源的更新,黑客喜歡。

對於 99.99% 的網站來講,只需開啓 HEAD、GET 和 POST,其餘方法不只不多使用,並且還會留下安全隱患。接下來,咱們對 Nginx 作一些調整,將文件 /opt/nginx/conf/nginx.conf 改爲下面這樣(第 74~76 行爲新增內容:

# 這一行是註釋,請將文件中的xiaobei-demo.com修改爲你本身的域名

worker_processes     1;

events {
  worker_connections 1024;
}

http {
  include      mime.types;
  default_type application/octet-stream;

  client_header_buffer_size     128k;
  client_max_body_size          50m;
  large_client_header_buffers   4 128k;
  server_names_hash_bucket_size 128;

  sendfile          on;
  keepalive_timeout 60;
  tcp_nodelay       on;
  tcp_nopush        on;

  fastcgi_buffer_size          64k;
  fastcgi_buffers              4 64k;
  fastcgi_busy_buffers_size    128k;
  fastcgi_connect_timeout      300;
  fastcgi_read_timeout         300;
  fastcgi_send_timeout         300;
  fastcgi_temp_file_write_size 128k;
  fastcgi_intercept_errors     on;
​    
  gzip on;
  gzip_buffers    4 16k;
  gzip_comp_level 2;
  gzip_disable    "MSIE [1-6]\.";
  gzip_min_length 1k;
  gzip_types      text/plain text/css text/javascript application/x-httpd-php image/jpeg image/gif image/png;
  gzip_vary       off;

  server {
​    listen 80;
​    server_name www.xiaobei-demo.com xiaobei-demo.com;
​    rewrite ^ https://xiaobei-demo.com$request_uri permanent;
  }

  server {
​    listen 443 ssl;
​    server_name www.xiaobei-demo.com;
​    
​    ssl on;
​    ssl_certificate /etc/letsencrypt/live/xiaobei-demo.com/fullchain.pem;
​    ssl_certificate_key /etc/letsencrypt/live/xiaobei-demo.com/privkey.pem;
​    ssl_ciphers "CHACHA20:GCM:HIGH:!DH:!RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS";
​    ssl_session_cache shared:SSL:10m;
​    ssl_session_timeout 10m;
​    
​    rewrite ^ https://xiaobei-demo.com$request_uri permanent;
  }

  server {
​    listen 443 ssl;
​    server_name xiaobei-demo.com;
​    root /wordpress/xiaobei-demo.com/;
​    index index.php;
​    charset utf-8;
​    
​    ssl on;
​    ssl_certificate /etc/letsencrypt/live/xiaobei-demo.com/fullchain.pem;
​    ssl_certificate_key /etc/letsencrypt/live/xiaobei-demo.com/privkey.pem;
​    ssl_ciphers "CHACHA20:GCM:HIGH:!DH:!RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS";
​    ssl_session_cache shared:SSL:10m;
​    ssl_session_timeout 10m;
​    
​    if ($request_method !~ ^(HEAD|GET|POST)$) {
​      return 403;
}

​    location ~ /.well-known {
​      allow all;
​    }

(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|json|css|ttf|woff|woff2|eot|svg|flv|swf|map|xsl|zip)${
​      add_header Access-Control-Allow-Origin *;
​      expires max;
​    }

​    location / {
​      fastcgi_pass  127.0.0.1:9000;
​      fastcgi_index index.php;
​      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
​      include       fastcgi_params;
​      try_files     $uri $uri/ /index.php?$args;
​    }
  }
}
複製代碼

修改完成以後,執行如下命令,讓 Nginx 從新加載配置文件便可:

/opt/nginx/sbin/nginx -s reload
複製代碼

搭建教程到此結束,若是不能鏈接的,請檢查本身的每一步操做。

相關文章
相關標籤/搜索