Hello!
2013/5/21 mirnshi:
> 想做个nginx的内容过滤,符合规则的不进入nginx的cache,有办法可以在数据写入临时文件前做过滤吗?我尝试的结果是数据已经写入临时文件,无法在内存里做过滤。
>
如果你说的“nginx cache”是指和 nginx upstream 模块一起工作的“http
cache”机制,则你不能很方便地在数据被写入临时文件之前进行过滤。这是因为 http cache 是直接集成在
ngx_http_upstream 内部的,而且并没有现成的回调钩子可供我们从外部插入处理逻辑。所以你需要修改 nginx 核心,特别的,是
ngx_http_upstream.c.
另外需要注意的是,因为 nginx upstream 是流式处理模式(即使是在全缓冲模式下,即 proxy_buffering on
等等),它会在读取上游响应的同时把已经收到的数据块及时地写入临时文件,以避免在内存中缓冲整个响应(因为响应本身可能非常大)。
所以如果你是根据文件内容来作为是否 cache
的条件,则你无论如何都可能需要把敏感内容之前的那部分数据写入临时文件(除非你想全部放在内存里),如果敏感内容判断出不要放入
cache,则直接设置 u->cacheable = 0 应当就完事了。
Best regards,
-agentzh