试用 Google CA 的 SSL 证书
其实对于大多数个人用户来说, 申请 SSL 应该都是不可避免的, 且大多数都会去选择一些免费的证书. 比如 Let’s Encrypt, TrustAsia, DigiCert 等.
Let’s 的好处应该就是可以免费申请通配符证书, 这点比较方便, 但证书有效期只有3个月. TrustAsia 可以提供最长1年的证书. (一般来说 证书有效期不能超过398天)
Google 在 今年的 3月30日 也推出了类似 Lets 的免费证书申请, 有效期最长也为3个月, 目前仍然处于内测状态. 不过既然是免费 那为何不试一试.
优劣势
支持通配符以及多域名.
支持为 IP 申请证书.
支持设置 1~90 天的有效期.
但是目前其不支持 IDN 域名 (常见的 包含中文的域名不行)
申请内测创建 Project首先需要申请一个 Google Cloud Platform 账户, 创建一个自己的项目并记录下其 project ID
填写申请表单https://docs.google.com/forms/d/1Euhflb5CXpuLik8czElhyAloTZJZobar4086dmlP ...
Waline 邮件异步推送
前言目前我使用的评论是 Waline,总体来说 体验还算可以。但是在使用过程中也遇到过一些问题,比如加上邮件推送后, 评论的速度会变的很慢。
研究过后发现 Waline 貌似是在评论时 直接进行发送邮件的,同步进行发信便会导致评论耗时较长,很影响用户体验,有时评论需要耗时几秒甚至超时。
Waline 应该是使用的 ThinkJs,理论上可以通过异步函数来进行异步发信,不清楚为什么要同步发信。由于我对于 ThinkJs 并没有太深入了解,直接修改源码也可能造成部署麻烦,于是我尝试寻找另外的方式来实现异步发信,在研究过后, 发现 Waline 可以设置一个 Webhook 地址,在评论时会自动向该地址发送一个 POST 请求。
其 POST 内容大致为:
评论文章时:
123456789101112131415161718{ "type": "new_comment", "data": { "comment": { "l ...
Magic Trackpad 使用体验
自从去年换了 Macbook Pro m1, 就感觉回不到 Windows 了. 不得不说 m1 的续航是真的可以, 带出去的时候从来不需要带上电源适配器. vscode + 浏览器 一个下午下来基本上还有 60% 以上的电.
但是它的扩展性的确有些难难堪, 只有两个 typec, 拓展坞我选择的是 Dockcase 的七合一 感觉还不错.
之前一直用的都是笔记本的自带键盘和罗技的 K380, 基本都是薄膜键盘, 其实体验还算可以, 一直没有机会尝试机械键盘. 趁着 618 入手了 Keychron 的 K7 矮茶轴. 用了几天还算不错.
在 Macbook 上使用鼠标其实并不方便, 即使再使用 Mos 等平滑鼠标的软件后, 使用起来也很别扭. 很久之前够买过 Magic Mouse, 但是它的设计的确令人发狂, 用起来很不习惯, 最终还是将它卖掉了.
Macbook 的触控板体验 一直都是业内较为优秀的。可以说用了触控板后, 就再也不喜欢鼠标了 游戏除外. 于是我忍痛下单了 2021 新款 Magic Trackpad.
很喜欢这种包装风格, 很简约.
总体来说, 体验很不 ...
Centos 编译安装 php81
出于 开发环境配置及学习的需求, 需要直接在 Centos 7 上编译安装 php-81.
最近在使用 webman 重构 拾光 的后端, 虽然 这次迭代可能存在一定的破坏性, 但得益于 Webman 的现有生态 以及 复用了多数的 Composer 库. 将会为 以后的版本迭代及功能扩展 带来一定的便利.
我们可以直接在 官网 找到源码, 这里选择 php-8.1.7.tar.gz, 通过 wget 等工具 下载至服务器.
相关依赖编译之前, 需要安装一些依赖.
1$ yum install libxml2-devel openssl-devel sqlite-devel libcurl-devel libicu-devel gcc-c++ oniguruma oniguruma-devel libxslt-devel libpng-devel libjpeg-devel freetype-devel libsodium libsodium-devel epel-release -y
接着通过tar -xzvf php-8.1.7.tar.gz 解压下载后的文件. 进入文件夹
...
Redis 统计实时在线人数
zsetRedis 中的 sorted set (有序集合) 也称为 zset. 它提供了两个参数, 一个为 score, 一个为 member.
其中, score 为排序的分数, 它可以是双精度或者整数. 其结构类似
123 | (score) member1key => | (score) member2 | (score) member3
如何实现我们可以简单的通过 zadd 方法向一个有序集合内添加成员.
为了方便演示, 在这里使用 Interval 的方式, 定时请求指定接口. 将 score 设置为请求时的 unix时间戳
zset 提供了一个 zcount 方法, 可以让我们快速获取指定 socre 范围内的成员数量.
我们假设用户5秒钟内无操作, 即掉线. 这样便可以通过 zcount 获取实时在线人数
12345678910111213141516171819202122func main() { // 使用 gin 提供 web 服务 r := gin.Default() r.GET(" ...
Centos 7 升级 Glibc-2.28
最近在捣鼓 Hexo 相关的评论系统, 一开始使用的是 Waline. 前端部署在 Vercel, 数据库使用的是官方推荐的Leancloud. 整体相应速度真的挺慢. 在尝试修改 Vercel 的serverless function所属位置后, 依旧达不到理想的速度.
于是我试着将其完全迁移至了自己的服务器, 直接使用官方提供的 docker compose 部署, 数据库采用的是mysql. 但是一直不满意其 评论时的速度. 因为我使用了邮件推送. 但是Waline貌似不支持 异步发信. 导致评论速度 很慢.
无意中了解到了 Artalk, 他是使用 Golang 开发的一款评论系统, 并且很好的支持了异步发信(应该是得益于Golang的goroutine). 并且Artalk也提供了一个叫做Artransfer的cli工具, 支持从原先的多种评论系统直接导出至Artalk.
于是我便尝试使用其工具导出评论, 可能我服务器的 linux 内核版本较老, 貌似只支持到GLIBC_2.2.6, 而 Artalk 需要GLIBC_2.28. 其实在之前使用 nvm 安装 nodejs ...
Nginx 重写 Query 参数
由于旧版项目, 依旧使用php-fpm模式提供api服务, 采用 类似 /api.php?m=account&act=login类似这种方式进行控制器分类.
目前的话 打算更换为其他框架, 使用路由来分配控制器.
由于前端及软件迁移成本较高, 就想着是否可以通过Nginx的伪静态来重写.
于是一开始尝试使用
1234location / { proxy_pass https://127.0.0.1:8787; rewrite ^api.php\?m=(.*)&act=(.*) /$1/$2 break;}
直接对其进行重写, 但测试后发现并为达到预期的效果, 服务端接收到的 依旧只有/api.php
貌似并未被nginx匹配到, 查询过后发现 这样貌似是匹配不到路径的?
最终在查询过后, 发现可以通过 query_string 来对其进行匹配
123456789101112location /api.php { proxy_pass http://127.0.0.1:8787; if ( $query_string ~ ^ ...
Typecho 迁移至 Hexo
原来我的博客使用的是Typecho, 主题为Handsome, 整体感觉还是挺不错的, 但是typecho在 大概80并发下, cpu占用就达到了90%以上. 还是比较离谱的, 也可能是我服务器不大行.
我一直使用的是 Dedipath的 2c2g的服务器, 整体感觉还不错. 所有静态资源都存放在腾讯云的COS里, 选择的是私有读写搭配腾讯云的CDN使用. 博客CDN使用的是Cloudfalre, 自己访问速度其实还可以, 但是在某些网站上测了下, 貌似还是比较慢的.
其实很久之前就了解过Hexo这类静态博客, 但一直没去尝试它们. 毕竟迁移还是较为麻烦的.
迁移文章对于文章的话,我使用的是 Typecho2Hexo这款工具, 它已经挺久没有更新了, 使用的torndb貌似还是基于Python2的, 但是依旧不影响使用. 简单填写数据库信息, 安装一下所需的依赖就可以了. 他会帮助你将typecho中的所有文章转换成Hexo的格式, 还是比较方便的.
评论对于评论, 我使用的是Waline, 服务端使用的依旧是Vercel, 本来也想全部放在自己服务器的, 但是nodejs环境貌似 ...
邮件退订的设计与实现
何为邮件退订在平常的验证码, 推广邮件中, 我们通常会在最下角找到 退订链接。通常访问它, 我们就不会再收到他们发送的邮件。
但是, 如何以最简单, 最节省性能的方式去实现这一功能呢?
一开始其实最简单的方式, 貌似就是在 发送邮件时, 生成一段随机字符, 存储在数据库或缓存中(已经缓存, 可直接读取), 然后拼接成一个网址, 附在邮件底部. 用户打开后 将字符串传递给后端, 从数据库或缓存中找到这段字符串所对应的邮箱.
获取到请求对定的邮箱后, 将其存储至数据库, 后续发信时, 只需查找一次便可.
这个过程其实很简单, 有没有办法让其更加简单, 发信时不去依赖服务端的持久化存储呢?
了解jwt其实我们可以借鉴一下 jwt (json web token) 的验证思路. jwt 是由 header, payload, signature 通过小数点间隔 组成的一段字符串.
header其中 header是由 typ和alg 组成的json 经过base64得出
1234{ "typ": "JWT", "alg" ...
自建不蒜子 访问统计
不蒜子 应该算是一款比较好用的前端访问统计工具
一段Js就可以实现统计 站点总 uv pv 及文章的 pv
自建 不蒜子 API因为其官网可能访问量太大, 不时出现502
于是我花了点时间, 用 Golang 实现了其功能, 数据存储采用 Redis.
uv 通过用户 ip + UserAgent 判断, pv 通过 referer 判断. 所有信息仅存储 md5
使用1234567<!-- 引入js --><script async src="https://busuanzi.9420.ltd/js"></script> 本文总阅读量 <span id="busuanzi_page_pv"></span> 次 本文总访客量 <span id="busuanzi_page_uv"></span> 人 本站总访问量 <span id="busuanzi_site_pv"></span> 次 本站总访 ...