淡定哥头像

技术文档

返回xml,json,jsp或servlet过长时被nginx截断的解决办法,tomcat 解决 POST请求传参数过长受限制的问题

在写接口时碰到了这个问题,返回json格式的数据,但是被截断了
经过排查,才发现是数据过大超出缓冲区最大容量,而将数据写入临时文件时又没有权限,所以再返回时,超出缓冲区的数据将丢失

解决方法:给fastcgi_temp 目录赋读写权限



tail -1000f /opt/nginx/logs/nginx_error.log


检查 nginx 错误日志,


2018/06/11 18:07:25 [crit] 21030#0: *18628 open() "/opt/nginx/proxy_temp/1/61/0000000611" failed (13: Permission denied) while reading upstream, client: 116.231.28.142, server: test.shellskey.com, request: "GET /api/course/getLesson.do?&id=&category_id=9&token=20180611174643Pubiib HTTP/1.1", upstream: "http://127.0.0.1:8202/api/course/getLesson.do?&id=&category_id=9&token=20180611174643Pubiib", host: "test.shellskey.com", referrer: "http://test.shellskey.com/course/video.html?category_id=9"

chmod 777 -R /opt/nginx/proxy_temp

刷新浏览器,显示正常


HTTP POST请求本身并未限制传入参数大小,是tomcat 容器设置了接收参数大小的限制
解决过程:
vi server.xml

<Connector port="8080" protocol="HTTP/1.1"   
  connectionTimeout="2000"   
  redirectPort="8443"   
  URIEncoding="UTF-8"  
  maxThreads="3000"     
  maxPostSize="-1"/>  
<Connection port="8009" enableLookups="false" redirectPort="8443" debug="0" protocol="AJP/1.3" />  

其中参数maxPostSize="-1"是限制post请求参数的大小,将值改为-1代表不限制;tomcat7.0.63之前,值改为-1代表不限制。
maxPostSize最大值为 2097152  (2M)。





分享到: 

* 发表评论:
Top