如何在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
复制代码

搭建教程到此结束,若是不能链接的,请检查本身的每一步操做。

相关文章
相关标签/搜索