最近域名备案了,所以我把自己的博客从 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 天,所以我们还需要配置机器人帮我们自动续期 SSL: sudo certbot renew --dry-run
然后我们就可以输入网址访问到网站,这时站点的左边会多一个小绿锁,变成了 https://。
(如果是一个 warning 标识符的话,那就是网站内还有图片或者其他的文件是基于 http 访问的,将其访问路径改为 https 就可以看到小绿锁了)
这时如果对网站内容进行更改的话,就会发现网站刷新后其实内容根本没有变化,这是因为 Nginx 有缓存机制,它会将指定站点的内容进行缓存以提升网站加载的速度,但这也会导致网站内容不能够实时更新,通常需要等待一段时间。
如果希望自己的网站能够实时更新内容的话,需要在 Nginx 的配置文件里将 HTTP 配置项的 sendfile 属性设置为 off。
以上均为个人之薄见,本人才疏学浅,有误之处还请谅解或回信。