nginx之FastCGI初探

最近又遇到了一件很蛋疼的事,通过spring的RestTemplate请求外部接口,response的body中的数据有机率发生了截断。


排错过程

仔细排查了RestTemplate的源码,结果并未发现限制返回数据大小的代码

再一想可能是服务端的问题,所以向运维要了权限,登陆了目标服务器,发现目标服务是通过nginx反向代理的。
谷歌了一下 “nginx 返回数据截断”, 发现 大部分都是关于: fastcgi_buffers 配置。

顺便看了nginx errlog,第一眼就是看到了Permission denied,通过一系列的查询,调试,最终确定就是nginx 的启动用户没有这个目录的写入权限

1
2018/11/16 13:45:20 [crit] 24052#0: *12935675 open() "/usr/local/tengine/proxy_temp/1/73/0000019731" failed (13: Permission denied) while reading upstream

反思

为什么权限不足,会导致http请求返回结果被截断呢?

  1. 首先得理解什么是FastCGI?

    CGI:通用网管接口,好吧,完全无法理解,看了好几篇关于CGI和FastCGI的博客,大致意思就是 FastCGI 是 CGI 的改良版,是为了实现动态网页的交互。其中 CGI 一次请求就加载一次 CGI解释器,开销过大,所以 FastCGI 提供了进程管理器来优化

  2. java 中的 sevlet 和 FastCGI 有什么区别?

显示 Gitment 评论