nginx-1.5.7做前端,一个c语言写的deamon用fastcgi做后端。同时上传多个大文件的时候,报了"Internal Error“,查看发现是/usr/目录满了。仔细一查,是因为我把nginx装到了/usr/local/nginx下面,结果,nginx默认会把上传文件缓存到 /usr/local/nginx/client_body_temp/ ,结果爆了。

于是,漫长的google之旅开始了。查了很多文章,有人说加一个"fastcgi_buffering off;“,试了不行,又有人说还要加"proxy_buffering off;”,试了还不行。然后是nginx的官方wiki说可以用HttpUploadProgressModule来做,我装上以后发现这玩意儿就是用来显示上传进度的,跟缓存不缓存一点关系也没有,或者是我弄错意思了?(http://wiki.nginx.org/Faq)

Q:Can I disable the buffering for upload progress? // How can I display upload progress on the client side?

A: These are both very frequently asked questions.
   Currently the only solution is the third-party module Nginx Upload Progress.
   (This functionality is planned for a future release of Nginx.)

最后找到这篇,显然有很多人遇到了跟我一样的问题,从里面"Weibin Yao“的回答来看,tengine已经加了方便这一功能的补丁。"Weibin Yao”,喔,原来是@淘文景同学,上次我问过他的,他早就告诉了我正确答案:下载最新版的tengine-1.5.2,然后在配置里加上

fastcgi_request_buffering off;

即可。是我自己稀里糊涂的拿upstream的nginx测试了这么久,唉。
照@淘文景同学所说搭了环境,一测,非常好,再没有讨厌的client_body_temp缓存了。在tengine的github上翻了一下,是这个补丁,小补丁帮大忙。

感谢@淘文景同学的工作和耐心 🙂