EchoNginxModule 封装了大量 Nginx 内部 API 用于流式输入和输出、并行/顺序 subrequests、定时器和睡眠以及不同元数据访问。
该模块包装了许多Nginx内部API,用于流输入和输出,并行/顺序子请求,计时器和睡眠以及各种元数据访问。
基本上,它提供了各种实用程序,它们通过简单地模拟不同种类的伪造的子请求位置来帮助测试和调试其他模块。
它需要:
- 直接从内存中提供静态内容(从Nginx配置文件中加载)。
- 用自定义的页眉和页脚包装上游响应(有点像加法模块,但内容直接从配置文件和Nginx变量中读取)。
- 在单个主请求中(使用echo_location及其好友)将各种“ Nginx位置”(即子请求)的内容合并在一起。
这是一个特殊的双角色模块,可以根据需要延迟用作内容处理程序或将其自身注册为输出过滤器。默认情况下,该模块不执行任何操作。
从技术上讲,该模块还演示了以下对模块编写者可能有用的技术:
- 直接从内容处理程序发出并行子请求。
- 通过沿子请求链传递连续性,可以直接从内容处理程序发出链接的子请求。
- 使用所有HTTP 1.1方法甚至是可选的伪造的HTTP请求正文来发出子请求。
- 使用自定义事件和计时器直接从内容处理程序与Nginx事件模型进行交互,并在必要时恢复内容处理程序。
- 双角色模块,可以(懒惰地)用作内容处理程序或输出过滤器,或两者兼而有之。
- Nginx配置文件变量的创建和内插。
- 使用output_chain,flush及其朋友进行流输出控制。
- 从内容处理程序中读取客户端请求主体,并在完成后(异步)返回到内容处理程序。
- 使用基于Perl的声明式测试套件来驱动Nginx C模块的开发。