从零开始搭建自己的私密博客

一、我们需要什么

首先假设你是一个有想法且表达欲望强烈的人,否则你不需要这篇文章。但如果仅仅是表达欲望强烈,那为什么不用微博呢?为什么不用朋友圈、公众号、小红书呢?因为在这里,想法可以无边无际,但表达却有诸多禁地。在国内的热门平台上,好处是看客熙熙攘攘,你不用担心流量;坏处是审查日严,你必须如履薄冰。

倘若在腾讯云、阿里云上购买VPS,申请域名,搭建个人博客,则监管少很多。但VPS仍然处于严密的监控之下,你并不是唯一拥有这台VPS最高权限的人。且域名也需要提供各种实名信息,交待网站的功能和目的,录制各种视频保证书,并进行很难通过的备案。这样的网站你仍然不可能畅所欲言。

而互联网并不是这样设计的。实名制并非“自古以来”,网站备案更不是“天经地义”。我们需要的,是一个可以畅所欲言的角落,可以被所有的人看到,但没有人知道你是谁。

WordPress是一个非常优秀的博客(网站)系统,全世界的网站中,有超过40%都是使用wordpress搭建的。因此我们也用它来搭建自己的博客。

二、名词解释

为了让完全没有经验的人士方便阅读后面的内容,先对一些基本概念进行解释。

VPS

Virtual Private Server,虚拟专用服务器。个人用户一般不会直接购买服务器硬件并配置专线网络,因为这太昂贵。因此首选方案是购入VPS,它是搭建在云上的虚拟空间,一般拥有固定的IPv4和IPv6地址,是搭建个人网站的最佳选择。

IP地址

互联网协议地址。一般家庭网络的IP地址并不是固定的,光猫或路由器每次拨号,都会得到一个不同的IP地址。而且,家庭宽带的IP常常还不是公网IP,它不能被互联网上的另一台设备直接访问到。如果要公网IP,而且固定IP,那俗称专线,通常只有公司才可以申请办理,每年的费用在数万元左右。所以,在家庭宽带内直接搭建网站是不现实的。

IPv4/IPv6

IPv4是传统的32位地址长度,由4个不大于255的数字构成,例如:213.71.33.179。IPv6则长达128位,有8段16进制字符串构成,例如:240e:3e1:42f:c00:e6fd:459f:fc8a:3f27。IPv6目前在移动设备端已经比较普及了,移动、电信、联通默认已经为手机提供了IPv6地址,但绝大多数公司内部仍然使用的是纯IPv4环境,无法访问IPv6网络。所以,我们一般要求VPS要拥有至少1个固定的IPv4地址以保证可用性。

Ping值

通常我们可以直接对VPS执行Ping操作。假设VPS的IPv4地址是213.71.33.179,那么在Windows中运行cmd,使用以下命令:

ping 213.71.33.179 -t

通过查看其返回延迟,可以判断我们与VPS的连接情况。一般而言,国内VPS的Ping值小于100ms,属于非常流畅了;日本的线路一般在100~200ms,也属于比较快的。美国的VPS通常西海岸的会比东海岸略快一些,正常的Ping值在200~300ms。如果一台VPS的Ping大于300ms,就算是比较慢的了。

在Ping命令最后加上-t参数,它会持续ping目标VPS,连续查看其返回值,也可以了解到VPS连接的稳定情况。

域名

用于访问网站的别名。例如,www.baidu.com就是一个域名,域名帮助记忆,也让网站具备了一定的商业价值。.com是最常见的顶级域名后缀,除此之外还有非常多的顶级域名后缀可以选择,例如.cn、.one、.site、.org、.cc、.co等等。baidu.com称之为一级域名,也叫根域名;前面再加上前缀,例如img.baidu.com是二级域名。当你购买一个域名时,指的是你拥有了一个类似mysite.com这样的一级域名。你可以免费增加多个二级域名,例如blog.mysite.com、pic.mysite.com……以匹配不同的VPS或网络服务。

DNS解析

将域名指向某个IP的操作。例如,你购买了一台VPS,拥有一个固定的IPv4地址213.71.33.179,又购买了一个域名mysite.com。你需要将域名与IP地址关联起来。这个操作就是DNS解析。

SSL证书

默认情况下,你的网站通过http协议访问。此时,服务器和客户端之间所有的数据通讯均不加密,非常容易被别有用心的人截获。这使得你自己或其他人在使用你的网站时存在担忧。https协议则可以加密数据传输,并确保网站的真实性。另外,有多种网络服务刚性要求https,所以将网站升级为https是必须的。有多种方法可以免费获取SSL证书,并将它配置在VPS上,从而将网站升级为https。

PHP

PHP是一种流行的网络程序语言。Wordpress使用的就是PHP语言。类似的语言还有ASP、ASPX、JSP等等。

MySQL

WordPress需要一个数据库支持,而MySQL是目前最通用的轻量级数据库系统,可以与wordpress装在同一台服务器(VPS)上。

好了,明白了这些,下面就开始吧。

三、申请安全邮箱

在一切工作开始之前,我强烈建议你首先拥有一个安全的电子邮箱。由于常见的国内邮箱服务,例如QQ邮箱、263邮箱、163邮箱等等,可想而知用户的邮件内容将不可避免地被审查,因此,用它们来注册接下来的一些服务存在安全隐患。

建议使用outlook邮箱,或者使用其他一些开源的、免费的端到端加密邮箱,这些邮箱服务有很多被墙了,但还有一些能用,例如https://tutanota.com/

四、购买VPS

在购买之前,我们需要大致了解一下VPS的整体生态和价格分布。

国内的VPS

国内提供VPS的主力厂商就是腾讯云、阿里云、华为云。它们的VPS主要优点就是快,你可以选择与自己所在城市比较近的服务器地区,从而得到ping值超低(大约10-20ms)的VPS。但他们的缺点是显而易见的:

1)带宽低(贵)。这是国内所有VPS的通病,通常个人用户购买的VPS带宽在8M~20M之间,再往上就非常贵了。8M的带宽,意味着你与这台VPS传输速度被限制在1MB/s。

2)VPS本身昂贵。一个典型的8G内存、100G固态硬盘、12M带宽的服务器,大约需要200元/月。相应地,国外VPS通常价格只有国内的1/3至1/2。

3)被审查。这个很容易理解。国内云厂商管理员可以任意进入你的VPS查看其中的内容,如果挂载网站,还会定期查看你的备案与网站内容是否相符。此外,还有一些特殊服务也是不允许提供的。

所以,基于其ping值低的优点,国内的VPS通常可以用作远程服务的跳板,或用来当做内网穿透工具的转接点。

如果你想发布的内容绝对“安全”,用它来当网站也是不错的,使用体验很好。

国外的VPS

放眼全球,VPS提供商如过江之鲫,简直让人眼花缭乱。与国内VPS相比,国外VPS显然在Ping值上不占优势,一般都在150ms以上。除此之外,性价比都很高,尤其是带宽通常都在500M~1G,速度很快(注意区分Ping值和带宽,前者表示连接的响应速度,后者表示传输数据的速度)。国外的VPS通常没有监管,但有一些会禁止特殊服务(典型的如科学上网代理服务)。

通常来说,若非临时急用,我们不会直接到某个大的VPS网站上直接购买VPS,因为这样做性价比不高。在全球范围内,几乎每天都有一大堆的VPS优惠信息,以及VPS低价转让信息。这里会不断更新VPS信息站:

VPS List

此外,如果有科学的网络条件,电报上有一些很好的VPS信息推送频道:

t.me/VPS_spiders
t.me/vps_reviews
t.me/vpsxinhaoqi
t.me/Hello_1024
t.me/dmitinfo
t.me/hostmonit

VPS价格

广泛地浏览VPS相关信息,就会形成一个VPS价格的认知。什么样的价格值得“立即入手”呢?举两个例子:

Extravm.com,2 CPU/16G内存/100G固态/IPv4/IPv6,每年134.4美元(循环出账,意即这个优惠一直延续),折合人民币不到80元/月,这个配置性价比很高了。
AdvinServers.com,8 CPU/32G内存/120G固态/IPv4,每月110元人民币,也很优惠。

注意,这么好的优惠可遇而不可求。因此购买VPS可能是一个比较漫长的过程,遇到好的要果断出手,不然可能半个小时就被抢光啦。

VPS架构

注意不能单一地看VPS价格。如果使用的Linux系统,那么各种架构(除了hyper-v)都可以;但如果你想用windows,那么建议KVM、Hyper-V、Xen架构,不要选择OpenVZ架构,因为它不支持windows(虽然常常非常便宜)。而且即便是Linux也需要小心,万一遇到无良服务商,超售很多,那么你的VPS实际体验会比标称的参数低很多。关于架构可以看这篇文章:https://www.ufovps.com/index.php?rp=/knowledgebase/2/VPS.html

VPS的线路

即使VPS价格很美丽,架构也合适,但线路不好一切都白搭。这个问题比较玄学,在购买之前,建议搜索该VPS相关评论。或者,先买一个月试试。对于线路不好但实在割舍不下的,如果有科学的网络,也有办法解决,但毕竟有一定风险。

一般VPS厂商都会告知你他们采用的是何种ISP线路。想要详细研究ISP的同学可以移步这里:https://www.tjsky.net/tutorial/633

VPS的操作系统

购买VPS的时候,常常就已经预先指定了操作系统。但有时候,仍然需要在VPS分配后手动安装。

如果是Linux系统,那么基础款1C内核/1G内存/5~20G硬盘的就可以提供基本的网络服务,也很便宜。如果需要用上Linux面板,或者希望安装Ubuntu这种带有UI界面的Linux,建议不小于2G内存。如果是安装Windows Server,则建议不小于4G内存,硬盘不应小于40G,通常建议是8G内存,100G硬盘。

新手建议Windows系统,版本最好是2016或以上。

好了,假设我们经过一番筛选,已经购买了一台满意的VPS,它支持Windows Server。

五、注册Cloudflare,购买域名,配置DNS解析

购买域名

由于搭建网站的同时,常常需要配置域名信息,因此,一般建议先搞定域名,再去搭建网站。我们可以使用Cloudflare购买域名。

访问https://www.cloudflare.com/,注册账号。可以在网站右上角切换为中文。在左侧“域注册”下面找到“注册域”,然后输入你想要的域名,Cloudflare会给出价格,同时给出一系列相似的域名。如果域名已经被别人注册,它会提示你该域名已被占用。这里支持包括.com在内的数百种域名后缀。但注意,不支持.cn,也不支持.ai。如果你的域名不那么热门,它的价格一般在9美元~40美元/年之间。支付使用国内的Visa即可。

配置DNS解析

购买成功之后(假设购买的域名是mysite.com),在“管理域”中,单击mysite.com后面的“管理”,然后在右侧“快速操作”中找到“DNS设置”。一般来说,我们不会单一的将mysite.com用于某一个网站,而是会添加多个二级网站,例如,blog.mysite.com用于我的博客,pic.mysite.com用于图床,bbs.mysite.com用于论坛……等等。在DNS设置中,可以添加记录,设置你想要的二级域名前缀,并分别设置对应的IP地址。

当二级域名对应的是IPv4地址时,DNS类型即为“A”。你也可以让你的二级域名指向IPv6,或干脆指向另一个域名,分别对应不同的DNS类型,具体可以参见这篇文章:DNS入门学习(五):不同DNS解析记录类型的含义

在Cloudflare中,可以看到每一个DNS解析记录中均提供了“代理状态”选项,默认是“已代理”。建议保留它。当勾选“已代理”时,Cloudflare已经免费为你的网站提供了第一层的SSL,并且隐藏了你的VPS真实地址。举例说明:

你的VPS地址假设是213.71.33.179,这是轻易不会改变的(有的VPS厂商会允许有限次数的修改)。一般而言,DNS解析,是将你的域名(例如blog.mysite.com)直接指向213.71.33.179,这同时也就暴露了你的VPS真实地址。这就让不怀好意的人明确了目标,某种意义上说降低了安全性。

而当Cloudflare开启代理DNS解析时,你的域名blog.mysite.com指向的却是另一个IP地址,可能是123.123.123.123,客户端与123.123.123.123的联系,Cloudflare免费提供了SSL加密,也就是免费实现了https协议访问。这个IP地址属于Cloudflare,背后由123.123.123.123负责与213.71.33.179通信,这就对用户而言隐藏了服务器(VPS)的真实地址。

好了,现在你已经有一个VPS,安装了Windows系统,有一个固定IPv4地址,并且有一个二级域名blog.mysite.com指向这个IPv4地址。下面可以在VPS中部署网站了。

六、激活Windows Server,配置中文环境

VPS网站一般会提供对VPS的操作面板。购买VPS后,根据购买时的选项,VPS可能已经装好了指定的Windows Server系统。或者,我们可以通过VPS网站提供的操作面板,手动安装Windows Server系统。注意选择64位(一般默认64位)。安装一般只需几分钟。

安装完成后,我们已经可以远程连接它。开始菜单运行“远程桌面”,输入VPS的IPv4(一般在VPS网站的管理面板上可以找到),输入用户名(一般是Administrator),密码(一般可以通过VPS面板设置,或VPS网站会将密码发送到注册邮箱)。不出意外的话,就可以进入VPS的远程桌面了。进入系统后,我们首先需要激活它。

注意,必须选择足够复杂的密码。暴露在公网上的、开启远程桌面的服务器,每秒钟可能会被来自全球的恶意服务器扫描数百次,简单的密码只需几天就会被攻破。应使用不小于10位的,数字、大小写字母、符号夹杂的密码。

Windows Server 2022的激活

对于Windows Server 2022,通常VPS提供的是Desktop Experience版本。以管理员身份运行cmd,然后执行以下命令,将系统变更为Data Center版本:

dism /online /set-edition:serverdatacenter /productkey:WX4NM-KYWYW-QJJR4-XV3QB-6VM33 /accepteula

激活注意,HEU KMS工具的最新版本已经不支持Windows Server 2022,因此我们用相对旧一些的30.2版。下载地址:百度网盘

先关闭系统病毒防火墙,然后解压缩(解压密码为HEU168),以管理员身份运行HEU_KMS工具,选择顶部的“数字激活”,在KMS38激活[离线]下,单击“开始”,即可搞定。

Windows Server 其他版本的激活

使用最新版本的HEU_KMS的“智能激活”即可。

添加中文包

在“设置”中找到“语言”,添加中文语言,并设置为默认语言。系统将下载安装中文语言包。

七、设置IIS

添加IIS

IIS,全称Internet Information Server,是Windows自带的网站服务管理器,但它默认没有安装,需要手动添加。

在服务器管理器中,单击“添加角色和功能”,或在控制面板中,单击“启用或关闭Windows功能”。

选中当前服务器(一般就一个当前服务器),在出现角色选择框时,勾选“Web Server(IIS)”,并展开子项Web Server->Application Development,勾选CGI。CGI是IIS支持PHP的前提条件。

继续下一步,直至Windows完成IIS的安装。

IIS会启动一个默认网站,可以在VPS本地运行Internet Explorer(或Microsoft edge),在地址栏输入“localhost”回车,访问本地默认网站。不出意外,会看到IIS介绍页,此时说明IIS运行正常。

由于我们在第四步已经做好了DNS解析,假设我们之前已经将blog.mysite.com解析到这台VPS,那么,在你自己的电脑上(不是VPS上),访问blog.mysite.com,应该也可以打开IIS的默认网站。

添加URL重写模块

为IIS添加URL重写模块,安装文件在这里:百度网盘

这时候我们已经配置好了搭建网站的基本环境。

八、安装Visual C++ 2015

需要手动安装Visual C++ 2015运行库,否则PHP高版本无法正常运行。VC运行库:百度网盘

九、安装并配置PHP

安装php

从官网下载PHP:https://windows.php.net/download。注意,由于我们使用的是IIS,因此下载最新版本的“x64”、“Non Thread Safe”版本。

PHP的新版本已经不再需要安装,直接解压缩所有文件到C:\php即可。

设置php

进入C:\php,将php.ini-production复制并重命名为php.ini。下面需要对php.ini的内容作一番修改:

1、找到;extension_dir = "ext",去掉最前面的分号(针对Windows系统)
2、找到;cgi.force_redirect = 1,去掉最前面的分号,同时将1改为0(针对IIS)
3、找到;fastcgi.impersonate = 1,去掉前面的分号(针对IIS)
4、找到下述4处参数,相应调大(考虑到wordpress某些操作比较费时,以及处理更大的附件)
max_execution_time = 30 设置大一点例如600
upload_max_filesize = 2M 设置大一点例如100M
post_max_size = 8M 设置大一点例如100M
memory_limit = 128M 设置大一点例如200M
5、找到下述extension,并去掉前面的分号
;extension=curl
;extension=mysqli
;extension=openssl
;extension=exif
;extension=fileinfo
;extension=mbstring
;extension=gd
;extension=intl
6、在上述一堆extension后面手动添加一行:
extension=php_zip.dll

下载imagick插件,官网地址:https://mlocati.github.io/articles/php-windows-imagick.html,注意下载对应php版本的nts_x64版本。将下载的压缩包中php_imagick.dll放到c:\php\ext目录,将其他DLL文件直接放到php目录。
在php.ini中的extension后手动添加一行:
extension=php_imagick.dll

保存php.ini,这时候PHP已经配置完毕。

IIS添加php程序映射

为了支持php,还需要配置IIS的“处理程序映射”。开始菜单中运行“Internet Information Server管理器”,在服务器主页(注意不是默认网站或任意网站)单击,在右侧功能区双击“处理程序映射”。

打开的窗口中,右侧单击“添加模块映射...”,在弹出的窗口中,请求路径填写“*.php”,模块选择“FastCgiModule”,可执行文件选择“c:\php\php-cgi.exe”,名称随意,例如“php fastcgi”。确定之后,IIS已经可以处理php。

返回到IIS主页,双击“FastCGI设置”,在功能区中右键点击完整路径中显示的路径“c:\php\php-cgi.exe”,单击“编辑”。在弹出的窗口中,找到“监视对文件所做的更改”,右侧选择文件“c:\php\php.ini”。这个操作使得今后php.ini的更改可以立即生效。

添加php默认文档

返回到IIS主页,双击“默认文档”,添加“index.php”。

测试php

以管理员身份运行cmd,执行以下命令重启IIS:

iisreset /restart

为了测试php是否运行成功,我们在IIS的默认网站对应的目录C:\inetpub\wwwroot中,手动新建一个php文件,例如test.php,用记事本编辑其内容为:

<?php phpinfo();?>

然后我们可以在自己的电脑上(不是VPS)访问blog.mysite.com/test.php,如果可以显示出当前php的详细信息,说明配置一切正常。

十、安装并配置MySQL

安装MySQL

建议到官方网站下载MySQL的安装包:https://dev.mysql.com/downloads/mysql/。下载Windows的MSI Installer即可。

安装比较简单,一路Next就行。注意,过程中设置的管理员密码,建议妥善保存。

创建数据库

安装完成后,开始菜单运行“MySQL 8.0 Command Line Client”。会打开一个命令行工具,使用用户名root,管理员密码(安装过程中设置的)登录。

输入以下命令创建一个数据库:

create DATABASE database_name;

注意:
1、database_name替换为你喜欢的数据库名称,尽量不要使用类似-这样的特殊字符。例如create DATABASE mywordpress;
2、妥善保存第1步创建的数据库名称。
3、后面的英文;千万不要忘记。

命令行工具会提示数据库创建成功。

好,截至目前,已经配置好了php支持和MySQL数据库。下面可以开始安装WordPress了。

十一、安装并设置WordPress

安装WordPress

首先到官网下载WordPress:https://cn.wordpress.org/download/#download-install

WordPress同样不需要安装,直接解压缩至c:\wordpress目录即可(或其他你喜欢的目录)。

为c:\wordpress文件夹赋予everyone读写权限。

打开“Internet Information Server管理器”,展开左侧服务器主机下的“网站”,并删除默认的“default website”。在“网站”上右键单击,添加一个网站。名字可以随便起,例如就叫“wordpress”。单击该网站,在右侧操作栏中单击“基本设置”,将它的主目录设置为c:\wordpress。

单击绑定,可以看到它目前绑定在80端口,暂时不要改它。

我们在自己的电脑上(不是VPS)访问https://blog.mysite.com,不出意外的话,已经可以打开WordPress的在线安装界面。

注意,这时候IIS上虽然没有配置SSL,使用的也是80端口,对应的是http服务,但Cloudflare的DNS映射那里,我们使用了Cloudflare的代理服务,因此我们可以用https来访问我们的网站。

在Wordpress的安装页面上,选择语言为“中文”。输入MySQL数据库的名称“mywordpress”,数据库用户名root,密码为之前我们在安装MySQL时设置的密码。点击“提交”。

数据库连接成功后,页面给出提示,正式开始安装。在安装界面,输入我们喜欢的wordpress站点标题,例如“My first blog”。设置网站的用户名和密码(同样地,密码请设置为足够复杂),并提供你的邮箱地址。点击“安装WordPress”。

安装结束后,点击“登录”,使用刚刚设置的用户名和密码登录WordPress的后台管理页面。

设置和测试WordPress

注意,由于默认情况下,WordPress会将文章的标题添加到文章的链接中,当标题包含中文时会出问题。因此,我们首先在后台界面点击左侧“设置”,进入“固定链接”,选择除了“文章名”以外的任意一种链接形式。其中“朴素”型比较短。

当然也可以保持默认设置,但在发文章时,手动设置一下文章的链接,稍微麻烦一些,但链接若能提示文章的内容,有助于文章被搜索引擎索引。

点击后台顶部的“+”新建文章,或在左侧文章菜单中单击“写文章”,任意添加一篇文章。

这时候在自己的电脑上(不是VPS),访问https://blog.mysite.com,就可以看到刚刚发布的文章了。

注意,当通过首页访问网站时,主页上默认不提供后台地址。在主页网址后加上/wp-admin/即可进入后台登录页面。对于本例来说,后台地址是:https://blog.mysite.com/wp-admin/。我们可以通过后台界面中的“外观”->“菜单”,添加自定义链接,让它显示在首页,这样更加方便。

可以在“外观”->“主题”中更换主题,或上传你从网上找到的好看的主题。

在“插件”中,安装一些必要的插件,包括:经典编辑器、任意一款Email功能插件(例如“Easy WP SMTP”)。

好,截止目前,你的WordPress已经可以正常使用了。

十二、设置WordPress的邮件功能

有时候你可能希望你的朋友也一起加入你的网站,大家可以互相评论。你可以在WordPress设置中开放用户注册功能,并且希望在别人评论你的文章时收到邮件通知。因此通常我们需要为WordPress配置好邮件功能。

邮箱侧设置

以最常用的QQ邮箱为例(若为了安全起见,也可以自行采用其他的匿名邮箱)。注意,想要让wordpress通过你的QQ邮箱发出邮件,并不是简单地提供QQ邮箱地址和QQ密码就可以的,为了确保QQ密码的安全,腾讯使用了专门用于此场景下的SMTP(发送邮件服务器)授权码。我们需要手动申请这个授权码。

登录网页版QQ邮箱,在顶部点击“设置”,并切换到“帐号”页。向下找到“POP3/IMAP/SMTP/Exchange/CardDAV/CardDAV服务”栏。

点击其中的“继续获取授权码”,根据提示完成绑定手机号的操作,之后打开“帐号与安全”页。

在“安全设置”页,最后一项,开启“POP3/IMAP/SMTP/Exchange/CardDAV 服务”,点击“生成授权码”。注意,授权码只展示一次,因此必须立即将它妥善保存。

这时候你的QQ邮箱已经可以用于网站自动发送邮件了。

wordpress后台邮件设置

回到wordpress后台,假设你已经安装了“Easy WP SMTP”插件,在左侧单击“Easy WP SMTP”。在Mailer Settings中单击“Other SMTP”。接下来的设置里,SMTP主机填写“smtp.qq.com”,加密类型选“SSL”,SMTP端口填“465”,Auto TLS可以保持OFF,SMTP认证设置为ON,SMTP用户名即为你的QQ号,SMTP密码为刚刚保存的授权码。

发件人邮箱地址是你的QQ邮箱地址。发件人名称建议可设置为你的网站标题名称,并打开“强制替换发件人名称”。保存设置。

在左侧“Easy WP SMTP”下面的“设置”里,有一个Send a Test,可以发送一封测试邮件。如果收到这封测试邮件,说明设置成功。

十三、自定义SSL并将网站设置为完全SSL

为什么需要完全SSL?

一台VPS仅运行一个网站,是比较浪费的。通过前述操作,你的wordpress本质上还是以http不加密协议运行在VPS的80端口,你的https访问是cloudflare帮助你实现的。这时候如果添加第二个网站,就不能再使用80端口了,需要使用其他端口,例如81端口。但这时候如果你还有其他网站需求,例如增加一个pic.mysite.com,被迫采用81端口,你将不得不使用带端口的地址http://pic.mysite.com:81来访问它。由于DNS解析不支持附加端口,此时你还无法对其使用cloudflare的免费SSL服务。这就非常不爽。

而若在VPS上将网站直接绑定为https,使用https默认的443端口,则可以通过勾选“服务器名称指示”(SNI)功能,将多个网站绑定在同一个443端口,这样一来,同一台VPS上的多个网站https://blog.mysite.com、https://pic.mysite.com等等,均可用正常的方式访问。

为了实现这个目标,我们需要为每一个二级域名单独申请SSL证书。

免费申请SSL证书

有很多方式可以免费申请SSL证书,但我不推荐使用国内的SSL证书服务,因为它们无一例外包含不必要的监管。建议使用freessl.org(注意,国内有一个freessl.cn,不要用它,虽然它很方便)。

打开网站:https://freessl.org/。注册一个帐号。单击“New Certificate”。

由于我们希望免费,因此只能为每个二级域名单独申请。勾选默认的“I need a signle-domain certificate”,并且输入你的二级域名,例如blog.mysite.com。单击“Next Step”。

免费的SSL有效期只有90天。所以我们还是选择90-Day Certificate。单击“Next Step”。使用默认的“Auto-Generate CSR”。单击“Next Step”。

这时候回顾你的order,还是默认第一项,因为只有它免费,继续单击“Next Step”。

完成Domain验证

注意,这时候进入了“Verify Domain”。这一步的目的是,它需要确保你申请SSL证书的二级域名属于你。证明的方式有三种,第一种需要配置邮件服务器(而我们并没有配置邮件服务器),建议选择第二种或第三种。这里介绍第二种。

第二种方式DNS(CNAME),需要我们手动添加一个特定的DNS解析。点击“Next”,网站给出了DNS解析的信息。我们回到Cloudflare,根据提示,添加二级域名DNS解析。注意,这里DNS类型选择CNAME,名称对应的Auth Key(稍微短一点的那个),内容对应的是Auth value(长一点的那个)。

切记,这个DNS解析需要关闭cloudflare的代理。

当DNS解析添加成功后,回到freessl.org的页面,点击最下方的“Verify Domain”。如果设置正确,Certificate(也就是SSL证书)创建成功,进入到Certificate页面。

生成IIS适用的pfx文件

在刚刚创建成功的blog.mysite.com后面,单击“Operation”,选择“download”,把证书下载到本地计算机。它是一个zip压缩包,包含了四个文件。把其中blog.mysite.com.key、blog.mysite.com.pem解压缩出来。

下一步,我们需要利用这两个文件,生成IIS支持的pfx证书文件。这里需要用到开源的OpenSSL工具,在这里下载(用那个5兆大小的lite版本即可):百度网盘

安装OpenSSL工具。默认它会安装到C:\Program Files\OpenSSL-Win64目录。

我们将刚刚解压缩的两个文件blog.mysite.com.key、blog.mysite.com.pem复制到这个目录:C:\Program Files\OpenSSL-Win64\bin

开始菜单运行cmd。执行以下命令,生成pfx文件:

c:
cd\
cd "C:\Program Files\OpenSSL-Win64\bin"
openssl pkcs12 -export -out blog.mysite.com.pfx -in blog.mysite.com.pem -inkey blog.mysite.com.key

注意,最后一行命令中,需要将blog.mysite.com改为你的真实域名。

随后,按照cmd命令提示输入一个密码,这个密码用于加密你的SSL证书。建议先创建一个password.txt,将密码保存进去。

这时候,已经在C:\Program Files\OpenSSL-Win64\bin目录中生成了blog.mysite.com.pfx文件。将它剪切出来妥善保存。

导入证书并绑定网站为https类型

远程到你的VPS服务器,将blog.mysite.com.pfx复制进去,放到一个妥善的目录。打开IIS。在IIS主页服务器页面中,双击“服务器证书”,在右侧单击“导入...”。在弹出的窗口中,选择blog.mysite.com.pfx文件,填入刚刚创建它时设置的密码,选择证书存储为“个人”,单击“确定”。

单击IIS左侧网站下面你的wordpress网站。单击右侧操作栏中的“绑定...”,可以看到只有80端口。单击右侧“添加”,类型选择“https”,端口默认443,IP地址保持默认“全部未分配”。主机名输入“blog.mysite.com”,勾选“需要服务器名称指示”,SSL证书选择刚刚导入的证书,单击确定。

删除网站绑定的80端口,使得它只能通过https访问。

设置cloudflare为完全SSL

这时候还差最后一步。我们需要在cloudflare中设置一下该二级域名的SSL安全模式。打开cloudflare,在主页中单击你的顶级域名mysite.com。左侧单击“SSL/TLS”,单击第三项“完全”(端到端加密,使用服务器上的自签名证书)。

大功告成。此时在你自己的电脑上访问https://blog.mysite.com,一切正常,似乎与之前没什么区别,但你的安全性已经进一步提高。并且,后面你的VPS上可以如法炮制,搭建多个https网站了。

90天到期之后怎么办

90天的免费SSL,到期之后无法续订,只能再重复一遍上面的操作,重新申请并导入SSL证书。考虑到它是免费的,麻烦就麻烦一点吧。(付费的话,需要至少9.9美元/月,可支持多个1年有效期的证书)