2013-07-29 786 views
5

配置:无法上传大文件与Nginx的(反向代理+ SSL协议)和Tomcat

  • 的Nginx作为反向代理+ SSL协商
  • 的Apache Tomcat。

除文件上传以外,一切似乎都正常。由于某些原因,文件上传从未完成。通过下面列出的配置,我可以上传小文件(4K)。上传失败的194K文件。当我将“client_body_buffer_size”增加到256K时,我可以上传194K文件,但是500K文件上传失败。将“client_body_buffer_size”增加到256K以上不会产生任何影响。

注意:当我直接访问Tomcat并上传500K文件时,它在几毫秒内完成。

所以,貌似Nginx配置有问题。任何建议,非常感谢。

upstream tomcat_server { 
     server 127.0.0.1:9090 fail_timeout=0; 
     keepalive 16; 
    } 

location/{ 
       root /xyz; 
       proxy_http_version 1.1; 
      proxy_pass http://tomcat_server; 
      proxy_set_header Connection ""; 
      proxy_set_header Host $host; 
      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-Forwarded-Server $host; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

      proxy_buffering   on; 
      proxy_connect_timeout 75; 
      proxy_send_timeout 180; 
      proxy_read_timeout 1200; 

     keepalive_timeout 120; 
     proxy_buffer_size 128k; 
     proxy_buffers 4 256k; 
     proxy_busy_buffers_size 256k; 
     proxy_temp_path /tmp/nginx/proxy; 
     proxy_temp_file_write_size 1000m; 

      } 

我曾尝试添加其它几个参数来配置nginx的(client_body_temp_path,proxy_temp_path,proxy_temp_file_write_size)。他们似乎没有帮助。

====

更新 - 2013年7月30日:

进一步调查显示,我们有问题上传196K的文件和向上。 194K文件的作品。 “client_body_buffer_size”值设置为256K。

Nginx的调试日志显示在功能衰竭的情况下执行以下操作:

2013/07/30 16:29:57 [debug] 14208#0: *1 recv: fd:11 2606 of 16384 
2013/07/30 16:29:57 [debug] 14208#0: *1 http proxy status 200 "200 OK" 
2013/07/30 16:29:57 [debug] 14208#0: *1 http proxy header: "Server: Apache-Coyote/1.1" 
2013/07/30 16:29:57 [debug] 14208#0: *1 http proxy header: "Content-Type: text/html;charset=utf-8" 
2013/07/30 16:29:57 [debug] 14208#0: *1 http proxy header: "Date: Tue, 30 Jul 2013 22:29:57 GMT" 
2013/07/30 16:29:57 [debug] 14208#0: *1 http proxy header: "Connection: close" 
2013/07/30 16:29:57 [debug] 14208#0: *1 http proxy header done 
2013/07/30 16:29:57 [debug] 14208#0: *1 xslt filter header 
2013/07/30 16:29:57 [debug] 14208#0: *1 HTTP/1.1 200 OK^M 
Server: nginx/1.5.2^M 
Date: Tue, 30 Jul 2013 22:29:57 GMT^M 
Content-Type: text/html;charset=utf-8^M 
Transfer-Encoding: chunked^M 
Connection: keep-alive^M 

2013/07/30 16:29:57 [debug] 14208#0: *1 write new buf t:1 f:0 000000001E61DAD8, pos 000000001E61DAD8, size: 168 file: 0, size: 0 
2013/07/30 16:29:57 [debug] 14208#0: *1 http write filter: l:0 f:0 s:168 
2013/07/30 16:29:57 [debug] 14208#0: *1 http cacheable: 0 
2013/07/30 16:29:57 [debug] 14208#0: *1 posix_memalign: 000000001E62D450:4096 @16 
2013/07/30 16:29:57 [debug] 14208#0: *1 http proxy filter init s:200 h:0 c:0 l:-1 
2013/07/30 16:29:57 [debug] 14208#0: *1 http upstream process upstream 
2013/07/30 16:29:57 [debug] 14208#0: *1 pipe read upstream: 1 
2013/07/30 16:29:57 [debug] 14208#0: *1 pipe preread: 2465 
2013/07/30 16:29:57 [debug] 14208#0: *1 readv: 1:13778 
2013/07/30 16:29:57 [debug] 14208#0: *1 readv() not ready (11: Resource temporarily unavailable) 
2013/07/30 16:29:57 [debug] 14208#0: *1 pipe recv chain: -2 
2013/07/30 16:29:57 [debug] 14208#0: *1 pipe buf free s:0 t:1 f:0 000000001E61DBD0, pos 000000001E61DC5D, size: 2465 file: 0, size: 0 
2013/07/30 16:29:57 [debug] 14208#0: *1 pipe length: -1 
2013/07/30 16:29:57 [debug] 14208#0: *1 pipe write downstream: 1 
2013/07/30 16:29:57 [debug] 14208#0: *1 pipe write busy: 0 
2013/07/30 16:29:57 [debug] 14208#0: *1 pipe write: out:0000000000000000, f:0 
2013/07/30 16:29:57 [debug] 14208#0: *1 pipe read upstream: 0 
2013/07/30 16:29:57 [debug] 14208#0: *1 pipe buf free s:0 t:1 f:0 000000001E61DBD0, pos 000000001E61DC5D, size: 2465 file: 0, size: 0 
2013/07/30 16:29:57 [debug] 14208#0: *1 pipe length: -1 
2013/07/30 16:29:57 [debug] 14208#0: *1 event timer add: 11: 180000:1375223577332 
2013/07/30 16:29:57 [debug] 14208#0: *1 http upstream request: "/upload/html?" 
2013/07/30 16:29:57 [debug] 14208#0: *1 http upstream send request handler 
2013/07/30 16:29:57 [debug] 14208#0: timer delta: 6 
2013/07/30 16:29:57 [debug] 14208#0: posted events 0000000000000000 
2013/07/30 16:29:57 [debug] 14208#0: worker cycle 
2013/07/30 16:29:57 [debug] 14208#0: epoll timer: 179994 

我注意到在以上的日志段“HTTP上游发送请求处理程序”,其中如在成功的情况下,我看到:

2013/07/30 16:29:44 [debug] 14208#0: *1 http upstream dummy handler 

任何想法“http上游发送请求处理程序”和“http上游虚拟处理程序”是什么意思,以及它们表示什么?

回答

12

您正在寻找的设置可能是client_max_body_size

语法:client_max_body_size size;
默认值:client_max_body_size 1m;
上下文:http,服务器,位置

设置客户端请求主体的最大允许大小,在“内容长度”请求头字段指定。如果请求中的大小超过配置的值,则413(请求实体太大)错误将返回给客户端。请注意,浏览器无法正确显示此错误。将大小设置为0将禁用客户端请求主体大小的检查。

+1

我确实在“http”级别指定了client_max_body_size:client_max_body_size 1000M; client_body_buffer_size 256k; – kpdev

7

我有同样的问题。迈克尔哈特尔的答案是正确的。在我的情况下,这是伎俩的设置:

在nginx中。conf添加:

http { 
    # at the END of this segment! 
    client_max_body_size 1000m; 
}