因为如今不少人仍然使用共享主机,因此我决定写这篇教程,教你如何设置本身的虚拟专用服务器(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
复制代码
搭建教程到此结束,若是不能链接的,请检查本身的每一步操做。