为网站设置域名并且添加 SSL 证书.

最近域名备案了,所以我把自己的博客从 GitHub 搬到了自己的服务器上,以提升访问的速度。其中因为前期准备不足,所以再添加 SSL 的时候踩了许多坑,所以特地写下来作参考之用。

安装前

在进行操作前,我们需要确保自己的网址已经解析到服务器 IP 上了,以方便后面的操作。

安装 Nginx

首先由于我用的是 Nginx,所以我们现需要安装 Nginx。

sudo apt-get install nginx

等待安装,在安装完成后,Nginx 会默认监听 80 端口,所以输入服务器的 IP 地址进行访问,会出现 Welcome to Nginx! 的字样。

这一步和 Hexo 的安装互不干涉,先后顺序随意。 但是安装完之后 80 端口会被 Nginx 占用,hexo server 命令可能会无作用。

Nginx 配置

在 Nginx 安装完成之后,我们还需要进行 Nginx 的配置,我们才能正常用自己的域名登入网站。

首先进入 /etc/nginx/ 目录,其中我们需要修改的文件是 nginx.conf/sites-avaliable/sites-enabled 中的 default 文件。而这两个文件实际上是相关联的,所以只需要修改一个文件就好

default 中的 server 模块改成下列代码:

	listen 80 default_server;
	listen [::]:80 default_server; //设置 80 端口为监听端口

	root /root/blog/public; //网站存放的地址 

	# Add index.php to the list if you are using PHP
	index index.html; //改地址下的网页,输入网址会默认访问这个网页

	server_name zeesain.top; //域名地址

	location / {
		# First attempt to serve request as file, then
		# as directory, then fall back to displaying a 404.
		try_files $uri $uri/ =404;
	}

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

然后在 nginx.conf 中的 http 模块添加以下代码:

	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;

这段代码会把 conf.d 目录下的 conf 文件都 include 到 nginx.conf 里面,所以要在 nginx 文件夹中新建一个 conf.d 文件夹,然后新建一个 conf 文件,方便日后进行管理和调试。

如果有 www 的网址的话,我们还需要对 www 的网址进行监听,所以在新建的 .conf 中写入以下代码:

	server {
    listen          90;
    server_name     www.zeesain.top;
    location / {
        alias /root/myblog/public;
        index index.html;
    }
}

其中的端口号一定不能够和默认的端口号相同(之前我们设置的是 80 端口),所以再改成其他的端口,我这里设置的是 90。

到现在为止,我们就已经修改好了 Nginx 的设置文件,现在重启 Nginx 使其生效:

sudo service nginx reload

申请 SSL 证书

SSL 是什么?对于 SSL 以及它的定义在这儿就不多介绍了,百度可以得到非常全的介绍和解释。

接下来我们需要用到 Certbot 来进行 SSL 的申请,官方网站里面有不同系统的安装方法介绍,本文中以 Ubuntu 16.4 为例。

首先运行以下的命令:

sudo apt-get update sudo apt-get install software-properties-common sudo add-apt-repository ppa:certbot/certbot sudo apt-get update sudo apt-get install python-certbot-nginx

在上述的命令执行完后,再运行 sudo certbot --nginx,按照其指令进行操作,按照自己所需对域名进行配置。

因为我们申请的 SSL 有效期为 90 天,所以我们还需要配置机器人帮我们自动续期 SSLsudo certbot renew --dry-run

然后我们就可以输入网址访问到网站,这时站点的左边会多一个小绿锁,变成了 https://

(如果是一个 warning 标识符的话,那就是网站内还有图片或者其他的文件是基于 http 访问的,将其访问路径改为 https 就可以看到小绿锁了)

这时如果对网站内容进行更改的话,就会发现网站刷新后其实内容根本没有变化,这是因为 Nginx 有缓存机制,它会将指定站点的内容进行缓存以提升网站加载的速度,但这也会导致网站内容不能够实时更新,通常需要等待一段时间。

如果希望自己的网站能够实时更新内容的话,需要在 Nginx 的配置文件里将 HTTP 配置项的 sendfile 属性设置为 off

以上均为个人之薄见,本人才疏学浅,有误之处还请谅解或回信。