2013-07-29 19 views
5

設定:リバースプロキシ+ SSLネゴシエーション はnginxの(リバースプロキシ+ SSL交渉)とTomcatで大きなファイルをアップロードすることはできません

  • のApache Tomcatなど

    • nginxの。

    ファイルのアップロードを除いて、すべてうまくいくようです。何らかの理由でファイルのアップロードが完了しない。以下の設定では、小さなファイル(4K)をアップロードできます。アップロードは194Kファイルで失敗します。 "client_body_buffer_size"を256Kに増やすと194Kファイルをアップロードできますが、500Kファイルのアップロードは失敗します。 256Kを超える "client_body_buffer_size"を増やしても影響はありません。

    注: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; 
    
          } 
    

    Iはnginxの設定ファイル(client_body_temp_path、proxy_temp_path、proxy_temp_file_write_size)にいくつかの他のパラメータを追加しようとしています。彼らは助けにはならなかった。

    ====

    アップデート - 2013年7月30日:

    詳しい調査の結果、私たちは、問題が196Kファイルをアップロードし、上向きにしていることを明らかにしました。 194Kファイルが動作します。 "client_body_buffer_size"の値は256Kに設定されています。

    2013/07/30 16:29:44 [debug] 14208#0: *1 http upstream dummy handler 
    
    :私は、成功事例のように、私はこれを参照してください上記のログスニペットで「HTTP上流の送信要求ハンドラを」、気づく

    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 
    

    nginxのデバッグログは、failueの場合には、以下を示して

    "http上流送信要求ハンドラ"と "http上流ダミーハンドラ"という意味は何ですか?

  • 答えて

    12

    お探しの設定はおそらくclient_max_body_sizeです。

    構文:client_max_body_size size;
    デフォルト値:client_max_body_size 1m;
    コンテキスト:HTTP、サーバー、場所

    は、「コンテンツ長」リクエストヘッダフィールドに指定されたクライアントのリクエストボディの最大許容サイズを設定します。リクエスト内のサイズが設定された値を超えると、413(Request Entity Too Large)エラーがクライアントに返されます。ブラウザはこのエラーを正しく表示できません。サイズを0に設定すると、クライアント要求のボディサイズのチェックが無効になります。

    +1

    "http"レベルでclient_max_body_sizeを指定しています。client_max_body_size 1000M; client_body_buffer_size 256k; – kpdev

    7

    私は同じ問題を抱えていました。 MichaelHärtlの答えは正しい。私の場合、これはトリックをした設定でした:

    nginx。conf:add:

    http { 
        # at the END of this segment! 
        client_max_body_size 1000m; 
    } 
    
    関連する問題