从零开始的个人博客搭建之旅(四)
前言
在上一篇文章中,我们已经实现了http访问个人博客,但http并不安全:
- 通信使用明文(不加密),可能会被窃听
- 不验证通信方的身份,有可能遭遇伪装
- 无法证明报文的完整性,有可能已遭篡改
比较严重且常见的情况是,你的个人网站/博客出现了别的广告页面,这显然是我们所不希望的。本文将介绍如何使用 nginx
和 frp
实现超文本传输安全协议https(对多域名有效),流程图如下:

SSL证书申请
一般在你购买域名的服务商那里可以申请到一年的免费ssl证书,也可以去Let's Encrypt、OpenSSL等获取免费证书,这方面网上文章比较多,不再赘述。
下载好证书,解压,找到nginx文件夹,将这个两个文件另外保存起来

安装及配置 nginx
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,占有内存少,并发能力强
去nginx下载页面下载最新稳定版安装包

先安装依赖,登录公网服务器,切换到管理员权限
安装GCC-GNU编译器集合
yum install gcc-c++
安装PCRE库
yum install -y pcre pcre-devel
安装Zlib库
yum install -y zlib zlib-devel
安装OpenSSL库
yum install -y openssl openssl-devel
利用 xftp 6
将 nginx
压缩包上传到公网服务器,进入目标目录,解压
tar -zxvf nginx-1.18.0.tar.gz
进入到 nginx-1.18.0
文件夹,添加支持SSL模块配置
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
编译安装
make install
这时进入 /usr/local/nginx/conf
路径,修改 nginx.conf
配置文件(建议将这个文件下载修改,然后再上传覆盖)
http配置
server {
listen 80;
#修改为你的域名
server_name www.drawrain.com;
#重写为https请求
rewrite ^(.*)$ https://$host$1 permanent;
}
https配置
server {
listen 443 ssl;
#修改为你的域名
server_name www.drawrain.com;
#修改为你的证书路径,这里我放到和nginx.conf文件同路径下
ssl_certificate ./zhibi.crt;
ssl_certificate_key ./zhibi.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
#端口号修改为你要穿透的端口
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_redirect default;
}
}
上传覆盖,别忘了上传证书文件到你修改的路径下!
frp配置修改
进入 frp
所在目录,先停止 frp
服务端、客户端,修改 frps.ini
监听端口为上述穿透端口
[common]
bind_port = 7000
vhost_http_port = 8080
重新启动 frp
服务端、客户端
进入 /usr/local/nginx/sbin
启动 nginx
./nginx
#或
nginx
这时进入浏览器输入你的域名,你会发现成功实现https访问啦
一些补充
致谢
本篇博客安装配置 nginx
分别借鉴了龙宝的博客Linux环境下Nginx的安装,以及喻聪的博客配置Nginx支持https,感谢两位博主给予的帮助。
后台登录
在完成https的升级后,可能会出现博客后台无法打开的情况,只需要网站运行目录下的 config.inc.php
文件中添加下述代码即可
/**开启https*/
define('__TYPECHO_SECURE__',true);
nginx操作命令
#停止nginx
nginx -s quit
#强制停止nginx
nginx -s stop
#重启nginx
nginx -s reload
#检测配置文件
nginx -t