CommentToMail 修改版 的插图

CommentToMail 修改版

最近突然发现本来每天一封的自建贴吧签到系统的邮件突然没有了,但是贴吧还是正常签到。上 Mailgun 界面一看,状态全线飘红: 日志里一大排发往我自己 Outlook 邮箱的退信,比如: 看提示是 Mailgun 的整个 AS 都被 Outlook 拉黑了。这下子是完全没法用了。 好消息是,有许多和 Mailgun 提供类似服务的邮件服务商,例如 SendGrid。我很快在他们网站上注册了一个账号,并且开启了 SMTP,把我的贴吧签到、NextCloud 等都接了进去,非常顺利。 坏消息是,我的博客用的是我专门给 Mailgun 写的 CommentGun ,需要修改一下才能接到 SendGrid 上。 本来我可能修改一下插件,然后又能出一个 CommentGrid 之类的插件,但是每家邮件服务商的 API 都不一样。如果这些服务商轮着被 Outlook 屏蔽……画美不看。 另一个好消息是,这些邮件服务商普遍支持 SMTP 发信。这意味着我可以用 CommentToMail。坏消息是,这个插件年久失修,在不少情况下会 GG(例如网站开了 SSL,...

为 nginx 启用 TLS 1.3,并传递给 FastCGI 后端 的插图

为 nginx 启用 TLS 1.3,并传递给 FastCGI 后端

OpenSSL 在最新的测试版中提供了 TLS 1.3 的实验性支持,包括了一系列的性能和安全性优化。最新的 nginx 1.13 系列也相应的添加了 TLS 1.3 的相关选项。 不过由于 TLS 1.3 还处在草案状态,现在使用还是要踩一些坑的: TLS 1.3 目前有 18、19、20 三个版本的草案已经被 OpenSSL 等实现,而且它们互不兼容,也没有一个 SSL 的库把它们三合一。 目前 Chrome、Firefox 等浏览器广泛使用的是 18 版草案,但是这个版本的 OpenSSL 不支持 TLS 扩展,而 Certificate Transparency 需要用到它。 虽然最新的 nginx-ct 插件增加了 TLS 1.3 的 Certificate Transparency 支持,但是由于第二条,它无法与草案 18 的 OpenSSL 一同工作,会出现编译失败的情况。因此必须退回到 nginx-ct 项目 release 中的 1.3.2 版本,而这个版本对 TLS 1.3 不生效。 我部署 nginx 使用的 Dockerfile 如下: FROM debian:jessie-slim MAINTAINER Lan Tian "lantian@lantian....

加入 DN42 实验网络 的插图

加入 DN42 实验网络

2020-03-16 提示 本文已有更新版本:参见《 DN42 实验网络介绍(2020 版) 》。 新版介绍中有更详细的注册申请流程,并根据 DN42 三年来的变化做出了修改。 以下内容写于 2017 年,仅作存档用途。 DN42 全称 Decentralized Network 42(42 号去中心网络),是一个大型的 VPN 网络。但是与其它传统 VPN 不同的是,DN42 使用了大量在互联网骨干上应用的技术(例如 BGP),可以很好的模拟一个真实的网络环境。 正因为它的真实,使用 DN42 的门槛比较高。你要扮演一个 ISP(互联网服务提供商),注册一个 ASN 号码,注册 IPv4 和 IPv6 的地址池,并且使用 BGP 在自己的服务器上广播它们。你还要和其它的用户联系,和他们做 Peering(对接),一步步进入完整的 DN42 网络。 DN42 在 172.20.0.0/14 和 fd00::/8 上运行,而这两个 IP 段都是分配给内网使用的。换句话说,你在 DN42 上怎么折腾,都不会影响到服务器其它的互联网连接。...

使用 ZeroTier One 在多台 Docker 服务器间建立双栈互通网络 的插图

使用 ZeroTier One 在多台 Docker 服务器间建立双栈互通网络

前言 多台 Docker 服务器上的容器互通是一个不好解决的问题。如果自建一个 Overlay 网络,就需要在一台服务器上建立 etcd 之类的服务。但如果 etcd 所在的服务器挂了,整个网络就 GG 了。我用的便宜 VPS 有偶尔网络中断的情况,我自己搞崩也服务器是常有的事,所以我不能采取这种方式。 Docker 也有其它的基于 Overlay 的商业化组网方案,例如 Weave,但是对于个人用户来说这些方案的价格太高了(我只是搞来玩玩),所以也不考虑。 在这些网络结构上,etcd 或者 Weave 之类的中心服务器记录了每个容器所在的服务器和内部 IP,所以在任何容器上都可以直接 DNS 解析到其它容器。也就是说,假如我设置了 lantian-nginx 和 lantian-phpfpm 两个容器,在 nginx 的配置文件里我可以直接把 php-fpm 的地址填成 lantian-phpfpm:[端口号],方便配置。 但我好像可以放弃这个功能啊?我的容器数量并不多,而且只有几个 MariaDB 需要跨服务器连接,做数据库主从备份,...

基于 Mailgun 的 Typecho 评论邮件提醒插件

很多时候,在 WordPress、Typecho 等自建评论系统的网站中回复,只能靠自己不断访问来确定自己的评论有没有被别人回复。然而,对于大多数人来说这样做是非常麻烦的。 博主解决问题的常用方法,就是安装邮件提醒插件。当一名评论者的评论被回复,就会有邮件提醒评论者。 Typecho 上使用最广泛的插件是 CommentToMail,最早由 DEFE 开发,后来由 Byends Upd 接手。该插件通过常用的 PHP Mail,SendMail 或者 SMTP 来发送邮件。 但是,比起以前的注册一个邮箱来发提醒邮件,现在博主们也开始使用 Mailgun 之类的邮件平台。这类邮件平台提供 API 发信功能,不需要再进行复杂的 SMTP 发信设置,也不需要繁杂的处理代码。我就对这个插件进行修改,让它通过 Mailgun API 而不是 SMTP 发送邮件。 GitHub 项目地址: https://github....

将网站迁移到 Docker

Docker 是一个 Linux 下的容器管理软件。每个容器某种意义上相当于一个 OpenVZ VPS,可以将服务器上的各个应用隔离开来。这种隔离有助于同一软件不同版本,或是互相冲突的软件在同一服务器上运行,比如 MySQL 5.7,MySQL 5.6 和 MariaDB 10.1 可以在同一台服务器上的三个 Docker 容器中运行。 但是 Docker 比 OpenVZ 优秀的地方在于,它对 Linux 内核的版本要求要宽松的多。OpenVZ 的内核至今为止停留在 2.6.32(稳定版)和 3.10(开发版),但是 Docker 可以在 3.10 以上的任何版本 Linux 内核运行。我的服务器现在运行 Linux 4.9 内核(为了 BBR),明显不能运行 OpenVZ,但是可以运行 Docker。 Docker 另一个优点是提供了一套非常完整的镜像仓库和自动化工具。在 OpenVZ 上,我必须分别登录每台 VPS,设置网络, apt-get ,还要定期去每台 VPS 上备份数据。但是在 Docker 上,我可以直接使用现有的软件镜像(不用再 apt-get ),...

GetIPIntel 的 Typecho 插件

GetIPIntel 的介绍可以在 刚刚这篇文章 看到。 我写了一个 Typecho 的插件,可以阻止使用代理的访客评论,或者把他们的评论丢进垃圾箱。 功能: 多种模式选择(仅黑名单,快速检查,全面检查) 多种处理措施(人工审核,丢垃圾箱,提交失败) 自定义阈值 插件可以在 https://github.com/xddxdd/typecho-getipintel 下载到。把 GetIPIntel 文件夹丢到 usr/plugins 文件夹下面就行。...

GetIPIntel 反欺诈服务

没人知道在网络上和你聊天的是一个人还是一条狗。网络的匿名性给网络欺诈带来了很大方便。前几年,有几位学生站长联盟里的站长邮件地址泄露,有好事者就挂上 Go^_^Agent 用他们的常用网名和邮件地址辱骂联盟里其它博客的博主,闹得鸡飞狗跳。 人人都会开的 Akismet 明显没起到什么作用,事后屏蔽 IP 也起不到什么作用(那个捣乱的人都是打一枪就跑)。而当时流行的一些反欺诈服务,比如 MaxMind,都要高额的使用费,不是普通站长承担得起的。 但现在,时代不同了! GetIPIntel 是一位机器学习和网络安全方向的美国研究生的项目。它使用机器学习技术,综合考虑一个 IP 的各项数据,从而判断来自某个 IP 的访客是不是开启了 VPN,TOR 一类代理。 这个服务不需要你付任何费用(但接受捐赠),甚至不需要手动注册。你只需要在请求他们的 API 时带上你的邮件地址,然后回复可能会发给你的验证邮件即可。 这个服务有 4 种模式: 1.只检查某个 IP 是不是已知的 VPN,...

让 IE 与 Firefox 支持 WebP 图像格式

写了段 PHP 代码,自动从向日葵 8 号卫星的网站上抓取高清图并合成一张图。获取卫星照片的方法可以在 这里 看到。 但是……最终合成的 4d 分辨率(2200x2200)的PNG图片有 7 MB 多大,而且中美网络又频繁抽风,实际都要1分钟左右才能从我的服务器上加载完这张图片。 太慢了! Google 提供了一种解决方案:WebP 图片格式。这种图片格式以无损压缩下极高的压缩比而著名。 把 7 MB 的地球照片 PNG 转换成 WebP,最终的文件大小是:700 KB 不到。对于一张分辨率2200x2200的图片来说,这个大小已经非常小了。 但是……以 IE 和 Firefox 为首的一些浏览器不支持 WebP,在这些浏览器上,WebP 图片是显示不出来的。所以,我们要在本地端加点处理,把 WebP 转换成浏览器支持的图像格式。 WebPJS 是一个在浏览器中完成上述转换的 Javascript 代码。它根据文件扩展名**(很重要!)**识别浏览器加载的 WebP 图像,并将它们转换成 PNG 显示在浏览器中。 要使用它,你只需要:...

用  Canvas-Nest.js 加上酷炫的网页背景 的插图

用 Canvas-Nest.js 加上酷炫的网页背景

今天在 进阶博客 看到了一个酷炫的网页背景效果,背景上会有动态的线组合成三角形等各种图形,并且会对用户鼠标移动作出响应。 要在自己的网站上加入这个效果,很简单,在 </body> 之前加入这段代码: <script src="//cdn.bootcss.com/canvas-nest.js/1.0.0/canvas-nest.min.js"></script> 刷新网页,效果就有了。如果没有看到效果,请检查你加的位置,这段代码不能加在 <head> 和 </head> 之间! 但这样就产生了一个问题:在服务器到用户速度较慢的时候(比如晚上中美链路抽风的时候),用户浏览器在加载到上面这段代码所在的位置,也就是页面底部之前,无法得知它要加载这个 Javascript。也就是说,这段 Javascript 要在页面加载完毕后才会开始下载,而这会显著拖慢网页的总体加载速度。 所以,我们要在开头 <head> 和 </head> 之间再加入如下代码: <link href="//cdn.bootcss.com/canvas-nest.js/1.0....