I'm starting to provide Chinese / English versions of some articles, switch with the Language menu above. 我开始提供部分文章的中文、英文翻译,请使用顶部语言菜单切换。

含有标签 nginx 的文章

用 nginx 搭建能查询任意公网 WHOIS 的服务器

在魔改 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.pubRegistry Domain ID: c69e5ccf9d834900be26f88fddc5c9e4-DONUTSRegistrar WHOIS Server: whois.dnspod.cnRegistrar URL: https://www.dnspod.cnUpdated Date: 2021-01-07T14:09:11ZCreation Date: 2016-10-23T08:36:41ZRegistry Expiry Date: 2029-10-23T08:36:41ZRegistrar: 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-devgit 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-slimMAINTAINER 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 文件),其中信息可以乱填,...