我想设置 nginx,使其可以根据它提供的响应按顺序处理多个请求处理程序。
- 收到请求
- 检查是否缓存在内存中 nginx 如果是则返回 如果否 goto 3
- 检查Redis是否有这个请求如果是返回如果没有转到4
- 转到反向代理上游服务器并返回
- 作为非阻塞操作将响应数据保存在redis中(内存缓存将按原样更新)
使用 Redis 的原因是我将数据保存在 Redis 中的各种结构中,并且可以从这些各种结构中检索数据,然后将这些块从 Redis 键的处理中合并回来以发送实际的 .
输入/输出是 XML。
使用ngx_srcache + ngx_redis/ngx_redis2可以实现步骤3、4、5:
http://wiki.nginx.org/HttpSRCacheModule
而第 2 步可以通过 ngx_lua 的 rewrite_by_lua 指令在同一位置完成:
http://wiki.nginx.org/HttpLuaModule#rewrite_by_lua
无论如何,第 1 步总是由 Nginx 核心完成 :)
如果您可以通过 ngx_lua 的 cosocket API 访问您的 HTTP 后端服务,那么所有这些步骤都可以完全在 Lua 中完成(在 ngx_lua 的content_by_lua中)。您将需要lua-resty-redis来非阻塞地访问 Redis,并需要lua-resty-http-simple(例如)来访问远程 HTTP 服务。