因爲如今不少人仍然使用共享主機,因此我決定寫這篇教程,教你如何設置本身的虛擬專用服務器(VPS),以便爲啓動一個 WordPress 網站準備好全部必要的服務。javascript
爲何共享託管不是最好的選擇?php
共享主機爲你提供了一個基本的儀表盤,來對域名、網站、郵件等進行設置,提供這種服務的託管公司包括: WP Engine、Flywheel、SiteGround、Kinsta 等等,他們確保你的網站通過優化和更新,所以你能夠高枕無憂。css
可是,若是在 VPS 上搭建 WordPress 網站,那麼你能夠了解成功運行 WordPress 網站所需的整個流程。而後,你還能學到如何設置和優化,從 Linux(操做系統)到 Nginx(Web服務器)再到 FTP(以及更安全的SFTP)、SSH、數據庫等等,最後你將學習如何設置 HTTPS、優化資源和總體安全性。html
一、註冊域名java
二、準備 SSH 和 SFTP 客戶端node
三、購買 VPSpython
四、配置域名 DNSmysql
五、鏈接 VPSnginx
六、安裝 WordPressweb
七、安裝 PHP
八、安裝 MySQL
九、安裝 Nginx
十、安裝 SSL 證書
十一、啓動 WordPress 網站
十二、最後的安全設置
爲了讓訪客更方便地找到和識別你的網站,你須要給網站綁定一個域名。我建議使用最受歡迎的GoDaddy 來註冊域名,這是全球最大的域名註冊商,目前管理着超過 7500 萬個域名。
註冊域名很簡單,可是要找到一個使人滿意的結果可能須要很長時間,若是你在這方面遇到了麻煩,請查看個人這篇文章:怎樣挑選域名。
爲了與 VPS 進行通訊,首先須要準備 SSH 和 SFTP 客戶端。SSH 客戶端能夠用來處理與 VPS 相關的全部工做,包括查看信息、系統升級、安裝軟件、安全配置、權限管理等等;SFTP 客戶端則主要用來上傳/下載目錄和文件。
我推薦的 SSH 客戶端是 Termius ,這是一個跨平臺的軟件,能夠在 Windows、macOS、Linux、iOS、Android 系統中運行。轉到官方網站,註冊一個帳號便可無償使用:
這是一款廣受讚譽的跨平臺軟件,在各大應用商店都得到了極高的評價,高級版的價格爲 $6.99/月,或者 $59.88/年,提供更多功能,包括:
對於大部分人來講,免費版的功能已經綽綽有餘。但若是預算容許,那麼高級版會爲你節省大量敲鍵盤的時間。
SFTP 客戶端我建議使用免費開源的 FileZilla ,這也是一款跨平臺軟件,兼容 Windows、macOS、Linux 系統,或者你也能夠下載源代碼,自行編譯安裝。
請將 Termius 和 FileZilla 安裝在本身的電腦中,咱們進入下一步。
市場上充斥着大量的 VPS 託管商,爲了讓你的選擇變得更加簡單,我已經挑選出了一些最好的選項,其中 Hostwinds 和 Vultr 支持支付寶付款。
在這篇文章中,我以 Hostwinds 爲例,轉到 官方網站,查看他們提供的非管理型 VPS 託管套餐:
最便宜的計劃只需 $4.49/月,但須要注意的是,這是首次購買價格,續費價格稍微要貴一些,爲 $4.99/月,不過這仍然很是便宜。咱們選擇最便宜的套餐,而後點擊綠色的 ORDER 按鈕註冊帳號:
Hostwinds 提供 30 天退款保證,並承諾高達 99.9999% 的正常運行時間。輸入姓名、郵箱和密碼以後,點擊 Submit 按鈕完成註冊,這時候會轉到訂單確認頁面
請根據本身的實際狀況進行填寫,主要注意如下幾個地方:
確認全部信息填寫正確以後,勾上頁面底部的 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:
你能夠在 Hostwinds 儀表盤或歡迎郵件中找到域名的 Nameserver 信息,例如,個人兩個Nameserver 分別是:
如今,咱們轉到域名註冊商處修改 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 的鏈接信息,你能夠在 Hostwinds 發送的郵件中找到:
或者 Hostwinds 的儀表盤中:
打開咱們前面第二步安裝的 SSH 客戶端 Termius,選擇菜單 Hosts,而後點擊 NEW HOST 按鈕以添加主機:
在新打開的側邊欄中,須要填寫如下信息:
填寫完成,並保存以後,雙擊便可鏈接。首次鏈接時,Termius 會彈出確認提示框,點擊 Yes 便可。
而後就與 VPS 鏈接成功:
如今,咱們打開 SFTP 客戶端 FileZilla,點擊左上角的 站點管理器 圖標來添加主機:
按照下圖所示進行填寫:
填寫完成以後點擊 鏈接 按鈕,這時候 FileZilla 會彈出確認提示框,點擊確認,而後與 VPS 鏈接成功。下圖左側是本地電腦的目錄結構,右側是 VPS 的目錄結構:
如今,咱們已經與 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.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官方網站,滾動到頁面下方,查看倉庫中的最新版本:
你能夠點擊列表右側的 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 官方網站,找到最新的穩定版本,目前是 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。
咱們使用 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
複製代碼
終於到了最後一步,請在瀏覽器中輸入你的域名,選擇你喜歡的網站語言(咱們以簡體中文爲例),而後點擊 繼續 按鈕進入下一步。你會看到一個提示頁面,須要準備數據庫鏈接信息:
若是你找不到數據庫鏈接信息,請查看前面的安裝 MySQL 小節,請按照下面所示輸入相關信息:
數據庫名 xiaobei-demo.com
用戶名 root
密碼 /fSi(UG?J0rhABC
數據庫主機 127.0.0.1
表前綴 wp_
確認無誤後,點擊 提交 按鈕。
若是信息所有正確,你將會看到下面這個頁面:
點擊 如今安裝 按鈕,在下一個頁面中輸入網站的一些必要信息:
上圖是一些必要的信息,其中密碼已經自動生成好。
確保已經將密碼保存在安全的地方,而後點擊 安裝WordPress 按鈕,你將會看到使人欣慰的成功頁面:
點擊 登陸 按鈕,進入網站後臺的登陸頁面:
輸入剛纔設定好的用戶名和密碼,而後點擊登陸 按鈕,將會進入網站的管理後臺:
在瀏覽器中輸入你的域名,將會看到一個全新的外觀:
如今,你的網站已經正式上線了,你能夠在管理後臺撰寫文章、上傳圖片、更新主題、設計頁面等等,不少工做都在等着你。
這一步並非必須的,但可讓你的 VPS 和網站更加安全,若是你對此有興趣,請繼續閱讀。
當你經過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 端口。
各個 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 控制檯看起來應該是這樣的:
前面咱們已經修改了 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:" ]; then
echo "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 界面示例:
HTTP 協議有 9 種方法:
對於 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
複製代碼
搭建教程到此結束,若是不能鏈接的,請檢查本身的每一步操做。