zhuizhuhaomeng Blog

「记录下来,一切都会更容易理解」

Add Open Telemetry Support for OpenResty

server { server_name example.com; return 301 $scheme://www.example.com$request_uri; } server { server_name “~^(?!www.).*” ; return 301 $scheme://www.$host$request_u...

Google Baidu 哪家强

openssl s_client 可以将握手信息打印出来,因此可以得到不少的信息。 通过 wireshark 抓包虽然也可以看到类似的信息,但是显然多一道手续。 我们需要关注那些信息呢? Certificate chain:证书链信息可以看到服务端发送的证书链是否完整。 Subject: 可以确认证书是否是泛域名证书 Peer signing digest: 证书签名的摘要...

使用 ipset 打造低成本的 IP 防火墙

问题 我们的 DNS 服务器遭到攻击了,每秒高达几万 qps,这个时候怎么办呢? 如果在应用层识别攻击流量并将其丢弃,虽然可以缓解部分问题问题,但是这对于 DDOS 的大流量攻击还是力不从心。 显然拦截报文应该在越靠近网卡收包的位置越好。目前比较理想的是用 ebpf,XDP 来实现报文的过滤。 虽然 ebpf,XDP 性能很高,但是他们不是简单的命令行操作就可以搞定的事情。 简单的重现...

如何利用多块不同规格的磁盘来打造高效的缓存

问题 大型网站都需要通过 CDN 实现就近访问来提升客户的服务满意度。很多客户直接使用 Nginx/OpenResty 来打造自己的 CDN 服务器。 这个时候就会出现一个问题:磁盘 IO 成为了服务器的性能瓶颈。 不假思索的方法就是使用更高性能的磁盘,但是高性能磁盘显然不是一个好的解决方案。 我们还可以通过将多块磁盘通过 RAID0 的方式组成磁盘阵列的方式来提升性能。但是 Nginx...

OpenResty 是如何打包的

序列文章 怎么编译 OpenResty 怎么编译 OpenCC 很多公司因为各种原因不能直接试用 OpenResty 官方提供的预编译的包。 但是由于对打包过程并不熟悉,因此他们可能不打包,也可能打包不规范。 因此这里介绍以下 OpenResty 官方是如何打包的。 下载 OpenResty 的 tar 包 1 2 cd ~ wget -O openresty-1.19.3.1.ta...

OpenResty 开发环境搭建

在开发 OpenResty 功能的时候需要能够本地执行所有的用例,因此就需要构建本地的开发环境。 如果都使用线上的 ci,那么经常会因为一些小问题需要提交很多次的代码。每次提交代码后等 CI 执行完成又需要很长的实际,这样就严重影响了开发效率。 本文基于 Rocky-8 环境搭建,不同的操作系统可能会有一点差异,需要自己调整。 sudo 用户添加 推荐用普通用户开发 OpenResty...

动态链接是怎么回事

背景 对于动态链接的详细工作过程一直很好奇,终于搞明白了其中的缘由,记录一下。 很多东西看起来很简单,但是如果你东西自己一步步的取验证,发现并没有那么的简单。因为涉及的知识点还是很多。 这里面因为部分术语还是没有搞得很清楚,因此看起来可能还是会有点晕头转向。 测试代码 这是一个最小化的代码,调用的 printf 函数是 libc 提供的,因此就涉及到动态链接了。 #include...

LuaJIT FFI 的注意事项

NULL 指针 与 nil 比较 我们一般是通过 ptr == nil 或者 ptr ~= nil 这样的方式来判断是否空指针。 但是下面的表达式却是错误的,无法达到判断 ptr 是否是 NULL 指针的目的: 1 2 3 if ptr then -- do something end 这个是因为 ptr 是一个 cdata 类型的数据,不同的数据类型的数据比较总是不相等。 ...

LuaJIT 代码片段

如何判断 IPv4 地址是内网地址 下面是 OpenResty 的一个片段代码,用于展示如何判断一个 IP 地址是否是内网地址。 这个比通过字符串判断是否是 127. 10. 172.16. ~ 172.31. 192.168. 的这些网段高效多了。 1 2 3 4 5 6 7 8 9 10 11 local bit_and = require "bit".band local addr...

LuaJIT 的参数传递

社区的问题 OpenResty 相比于 Nginx 的一大优点就是动态特性。社区上有人问想要在 404 的时候重试上游应该如何实现。 事实上这个功能 nginx 自身也可以实现,只不过 OpenResty 可以更加灵活的控制请求。 如何实现 想要动态控制上游就需要使用 balancer_by_lua* 这个指令。 为了实现 404 时候的重试,需要 nginx 的 proxy_nex...