web-dev-qa-db-ja.com

nginx Chunked Transfer Encodingを有効にする

nginx 0.8.35はチャンク転送エンコーディングをサポートしている可能性があります

Nginx 0.8.35での変更点2010年4月1日

*) Change: now the charset filter runs before the SSI filter.

*) Feature: the "chunked_transfer_encoding" directive.

私はnginxリバースプロキシを介してgit-http-backendプロセスにプッシュgitの変更を取得しようとしているため、これは素晴らしいことです。 Git HTTPはチャンク転送エンコーディングを利用します クライアント側の効率上の理由から

しかし、私はそれを機能させることができません。 Debian Lennyでnginx 0.8.44を使用しており、次のconfigure呼び出しを使用しています。

./configure \
--sbin-path=/usr/sbin \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--user=www-data \
--group=www-data \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-http_realip_module

そして、次のconfファイル:

server {
    server_name example.com;
    location / {
        proxy_pass  http://192.168.0.10;
        include     /etc/nginx/proxy.conf;
        chunked_transfer_encoding on;
    }
}

と私 proxy.confは次のようになります。

proxy_redirect          off;
proxy_set_header        Host $Host;
proxy_set_header        X-Real-IP $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size    100M;
client_body_buffer_size 128k;
proxy_connect_timeout   90;
proxy_send_timeout      90;
proxy_read_timeout      90;
proxy_buffer_size       4k;
proxy_buffers           4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

(元々私はこれを投稿しました Stack Overflowへの質問 ですが 助言されました サーバーの障害により適切です)

17
rentzsch

これは古い質問ですが、問題の検索で出てきました(午後に解決に努めました)。マーティンFのコメントには、それを機能させるための手掛かりが十分にありました。

トリックは、ロケーションブロックにproxy_buffering off;を設定することです。アップストリームサーバーがチャンクされた応答を送信していると仮定すると、nginxは個々のチャンクをクライアントに送り返します-gzip出力圧縮をオンにしている場合は、オンザフライでgzipします。

バッファリングをオフにすると他の欠点が生じる可能性があることに注意してください。その理由を理解せずにバッファリングをオフにしないでください。

25
John Dalton

明確にするために質問を編集することをお勧めします。チャンク化されたリクエストとチャンク化された応答には大きな違いがあります。ジョン・ダルトンの答えは後者に対応しています。 Gitは両方を行います。

Nginxは現在チャンクPOSTリクエストをサポートしていないため、この投稿はトピックの検索結果で上位に表示されます。チャンクPOSTリクエストは、事前にアップロードされているデータの量であり、携帯電話で頻繁に使用されます。

私が見つけた唯一の実用的な解決策はこれです:

http://wiki.nginx.org/HttpChunkinModule

Nginxはロード可能なモジュールをサポートしていないため、残念ながらnginxを再コンパイルする必要があります。

9
Roger Binns

私の場合...私はたくさんのことを試し、最後に設定に追加するだけで済みます

proxy_http_version 1.1;

そしてそれはうまくいきます...

2
Cesar Gallego

他の回答は以前は有効でしたが、これは古い質問です。

チャンク転送はnginx 1.3.9[1]でサポートされているようです。これは2013年半ばにリリースされたと思います。

[1] http://wiki.nginx.org/HttpChunkinModule

1
sandstrom