在 魔改 nginx,建立一个 DN42 的 WHOIS 服务器 之后,我把我的 DN42 Looking Glass 接到了这个 WHOIS 服务器。由于我的 Looking Glass 可以作为一个 Telegram 机器人运行,群友们就用它来查询 IP 和域名的 WHOIS 信息。 很快,我们发现了一个问题。有相当一部分群友在接触 DN42 之后,又在公网上申请了自己的 ASN 和 IP 段,并且在各个 IX 进行 Peering。因此,群友们常常会查询一些公网的 IP、ASN 和域名,而群里的机器人都不支持这个。如果有一个 WHOIS 服务器可以把公网的查询代理到对应的注册局,就会极大的方便大家的查询。 而代理正是 nginx 擅长的事。只要魔改一下 nginx 让它支持向上游发送「一问一答」的协议,再加上 OpenResty 的 Lua 脚本支持,就可以很快地搭出一个 WHOIS 代理。 修改 nginx 代理逻辑 nginx 向代理上游发送请求时,会调用 ngx_http_proxy_create_request 函数创建请求头部,也就是 GET /url HTTP/1.1 这部分。...
将 nginx 用作 DN42 WHOIS 服务器
在前一篇文章《 用 nginx 建立 Gopher 网站 》中我提到,用 nginx 提供 Gopher 服务只是魔改的副产物,我原本的计划是将 nginx 魔改成一个 WHOIS 服务器,用于 DN42。这篇文章将介绍详细过程。 WHOIS 协议 首先,我们可以找一个 WHOIS 服务器,来观察它都返回了哪些数据。以向 .pub 域名的 WHOIS 服务器查询我的域名信息为例,执行 telnet whois.nic.pub 43 : # 输入下面一行并按回车 lantian.pub # WHOIS 服务器返回以下信息 Domain Name: lantian.pub Registry Domain ID: c69e5ccf9d834900be26f88fddc5c9e4-DONUTS Registrar WHOIS Server: whois.dnspod.cn Registrar URL: https://www.dnspod.cn Updated Date: 2021-01-07T14:09:11Z Creation Date: 2016-10-23T08:36:41Z Registry Expiry Date: 2029-10-23T08:36:41Z Registrar: DNSPod, Inc. # 略过部分内容 # 随后 WHOIS 服务器关闭连接 和 Gopher 一模一样,一问一答的协议。...
用 nginx 建立 Gopher 网站
更新日志 2021-03-24:改进文章处理逻辑,增加识别链接和图片的代码。 2021-03-21:最初版本。 什么是 Gopher Gopher 是互联网发展早期的一种网络协议,由美国明尼苏达大学于 1991 年发明,用途类似于现在的 HTTP。它的基础协议非常简单: 客户端连接服务端的 TCP 70 端口,并发送一串 URL,用 CRLF 结尾,例如: some_dir/hello.txt 服务端把这个文件的内容全部发过来,然后关闭连接。 没了。 服务端返回的文件可能是一个 TXT、一张图片、一个二进制文件,也可能是一个有着特殊格式的 Gopher 列表文件,称为 Gophermap 。这个文件每一行由以下几部分组成: 一个字符,代表这一行的类型,是文字( i )、到一个 TXT 的链接( 0 )、到另一个 Gophermap 的链接( 1 )、图片( I ),还是二进制文件( 9 )。当然还有一些现在已经不再使用的协议,可以参阅 RFC1436 Section 3.8 。 一句话,代表这一行显示的信息,例如 Hello World 。 一个 TAB。...
nginx 配置 LDAP 认证
我的各台服务器上安装了各种不同的服务,都有各自的用户名密码体系,难以统一管理。假设未来某天我的密码泄露了,一个个修改就会非常累人。因此,我希望用一个服务来专门管理用户名密码,其它服务都从它上面获取认证信息。 LDAP 是常用的认证协议之一,不仅有许多软件原生支持它的认证(包括 Jenkins,pfSense 等),而且通过插件可以使得 nginx 支持它,为任何基于网页的服务加上统一管理的认证。 添加插件 如果你的 nginx 已经是源代码编译的,添加 nginx 的 LDAP 插件只需要三步: apk add openldap-dev git clone https://github.com/kvspb/nginx-auth-ldap.git ./configure --add-module=/path/to/nginx-auth-ldap 我依然使用 Docker 部署 nginx,Dockerfile 可以在 https://github.com/xddxdd/dockerfiles/blob/210f0f82c7bc1c0c3697d329b73ea31abea6b14a/nginx/Dockerfile 找到,其中的编译参数可以参考。 配置认证 安装插件后,先在 nginx....
为 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....
nginx 配置并启用SSL和SPDY访问
来自 CloudFlare 博客的最新消息( http://blog.cloudflare.com/google-now-factoring-https-support-into-ranking-cloudflare-on-track-to-make-it-free-and-easy ),Google可能会在算权重的时候把网站支持SSL作为加分项目。因此我就给我的博客启用了SSL。 申请证书 SSL在服务器端必须有证书。这个证书最好不要自己生成,否则大多数浏览器都会提示证书不受信任。 StartSSL是目前唯一一家颁发免费SSL证书并且受到大多数浏览器信任的证书颁发机构,可以根据 http://www.freehao123.com/startssl-ssl/ 这篇文章进行操作。 不过在实际操作中,由于StartSSL连接速度较慢,如果按照向导生成证书,中途可能卡住,而一旦卡住就要全部重来,我们可以自己生成证书请求,然后提交。 在你的Linux服务器(本例为Debian 7)上输入以下命令产生一个私钥: openssl genrsa -out privkey.pem 4096 输入以下命令产生证书请求(CSR文件),其中信息可以乱填,...