Lan Tian @ Blog

为 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 一同工作,会出现编译失败的情况。...

 

加入 DN42 实验网络

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 上怎么折腾,都不会影响到服务器其它的互联网连接。DN42 官方提供了很详细的注册 ASN 和 IP 的教程,...

 

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

前言多台 Docker 服务器上的容器互通是一个不好解决的问题。如果自建一个 Overlay 网络,就需要在一台服务器上建立 etcd 之类的服务。但如果 etcd 所在的服务器挂了,整个网络就 GG 了。我用的便宜 VPS 有偶尔网络中断的情况,我自己搞崩也服务器是常有的事,所以我不能采取这种方式。Docker 也有其它的基于 Overlay 的商业化组网方案,例如 Weave,但是对于个人用户来说这些方案的价格太高了(我只是搞来玩玩),所以也不考虑。在这些网络结构上,etcd 或者 Weave 之类的中心服务器记录了每个容器所在的服务器和内部 IP,所以在任何容器上都可以直接 DNS 解析到其它容器。也就是说,假如我设置了 lantian-nginx 和 lantian-phpfpm 两个容器,...

 

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

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

 

将网站迁移到 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 上,...

 

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 时带上你的邮件地址,然后回复可能会发给你的验证邮件即可。...

 

让 IE 与 Firefox 支持 WebP 图像格式

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

 

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

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

 

在 Telnet 中显示有趣的东西

Telnet 是1969年发布的最古老的网络协议之一,却经久不衰,因为它实现简单,也可以用来实现一些有趣的用途。网络上有人开发出可以在 Telnet 终端中观看的彩虹猫(Nyancat),还有在 Telnet 中观看的星球大战。 在你的终端中输入以下内容,就可以看到 ASCII 字符版星球大战:(Windows 7 及以上用户需要先到控制面板-程序与功能-添加删除 Windows 功能里选中 Telnet 客户端功能才能使用)1telnet towel.blinkenlights.nl输入以下内容就可以看到彩虹猫:1telnet nyancat.dakko.us我们也可以在自己的服务器上建立一个类似的 Telnet 服务,让它显示自己定义的内容。我们以在终端中显示黑客帝国数字雨的 CMatrix 软件为例,说明如何建立这个服务。登陆到你的 Debian 服务器上,输入下面的命令:...