nginx 청크 전송 인코딩 활성화


17

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 \
--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에 게시 했지만 서버 결함에 더 적합하다고 권고 했다)


1
버퍼 및 청크 인코딩을 사용할 수 없습니다. 버퍼는 데이터 전송을 기다립니다. 청크는 즉시 전송해야합니다.
Martin Fjordvald

분명히 Nginx는 버전 1.3.9 (2012 년 11 월 27 일) 이후 청크를 지원합니다. 그러나 스마트 폰이 청크 된 POST 요청을 Nginx 서버에 보낼 때 여전히 "411 Length Required"오류 메시지가 나타납니다. 어떤 충고?
Meir

답변:


25

이것은 오래된 질문이지만, 문제를 찾기 위해 나왔습니다 (오후에 해결하려고 노력했습니다). Martin F의 의견은 그것이 작동하게 할 충분한 단서를 제공했습니다!

요령은 proxy_buffering off;위치 블록에서 설정 하는 것입니다. 업스트림 서버가 청크 응답을 다시 전송한다고 가정하면, nginx는 개별 청크를 클라이언트로 다시 전송합니다. gzip 출력 압축이 켜져 있으면 즉시 청크를 압축합니다.

버퍼링을 끄면 다른 단점이있을 수 있으므로 이유를 이해하지 않고 맹목적으로 버퍼링을 끄지 마십시오.


9

명확히하기 위해 질문을 편집하는 것이 좋습니다. 청크 요청과 청크 응답에는 큰 차이가 있습니다. John Dalton의 답변은 후자를 다루고 있습니다. 힘내 둘 다.

Nginx는 현재 청크 POST 요청을 지원하지 않으며이 게시물은 주제에 대한 검색 결과에서 높은 것으로 표시됩니다. 청크 POST 요청은 미리 업로드되는 데이터의 양을 모르는 경우 사용되며 휴대폰에서 자주 사용됩니다.

내가 찾은 유일한 작동 솔루션은 다음과 같습니다.

http://wiki.nginx.org/HttpChunkinModule

불행히도 nginx는로드 가능한 모듈을 지원하지 않으므로 nginx를 다시 컴파일해야합니다.


나는 동의합니다 : HttpChunkinModule이 유일한 이론적 해결 방법이라는 것을 알았습니다 ...하지만 내 상황에서는 열리지 않습니다. 다른 일을 할 수 있는지 아는 사람이 있습니까? (2011 년 1 월 30 일 이후로 변경 되었습니까?)
mdahlman

1
내가 아는 변경 사항이 없습니다. 나는 이것을 가능하게하기 위해 다른 날에 nginx 재 컴파일을 수행했습니다.
Roger Binns

2

내 경우에는 ... 나는 많은 것을 시도하고 마침내 구성에 추가해야합니다.

proxy_http_version 1.1;

그리고 그것은 작동합니다 ...


나는 proxy_set_header Connection "";...에서 원래 답변 을 추가해야했습니다 -> forum.nginx.org/read.php?2,247883,247883#msg-247883
Christian Ulbrich

이것은 나를 위해 일했다. 그러나 나는 왜 그런지 이해하지 못한다.
Jeff

내 마지막 의견으로 업데이트 .... 내 업스트림 서버가 HTTP 1.1에 도입 된 Chunked Transfer Encoding ( en.wikipedia.org/wiki/Chunked_transfer_encoding ) 을 사용했기 때문에 작동했습니다 . nginx 프록 싱의 기본 http 프로토콜 버전은 1.0입니다.
Jeff

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.