我正在使用Nginx,并且需要能够动态生成图像。当客户端发送图像请求时,我需要运行外部程序来生成图像。外部程序将生成的图像留在文件系统中。
似乎最简单的方法是编写运行外部程序的FastCGI脚本,然后从文件系统读取图像,通过FastCGI将其传输到nginx。
但是,这似乎效率低下,因为我需要编写自己的文件复制例程,然后将文件从磁盘复制到本地缓冲区,然后转换成数据包以便FastCGI传输到nginx,然后传输到nginx的缓冲区,然后最后进入数据包发送给客户端。似乎利用nginx有效提供静态内容的能力会更有效。
理想情况下,我想让某些方法让nginx等到产生图像,然后从磁盘上提供它。另一个想法是,FastCGI响应可能会使用某种标头,表明nginx实际应该服务于文件,而不是来自FastCGI脚本的响应。这些方法中的任何一种都可能吗?
答案 0 :(得分:0)
X-Accel-Redirect
- 正是您所寻找的
用法示例可在此处找到:http://kovyrin.net/2006/11/01/nginx-x-accel-redirect-php-rails/
Nginx是异步的,因此它可以为所有其他连接提供服务,而无需等待来自FastCGI脚本的数据。