Nginx को स्थानांतरित स्थानांतरण एन्कोडिंग को सक्षम करना


17

ऐसा लगता है कि nginx 0.8.35 chunked हस्तांतरण एन्कोडिंग का समर्थन कर सकता है :

नगीनक्स 0.8.35 01 अप्रैल 2010 के साथ परिवर्तन

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

*) Feature: the "chunked_transfer_encoding" directive.

यह बहुत अच्छा है, क्योंकि मैं एक nginx रिवर्स प्रॉक्सी के माध्यम से एक git-http-backend प्रक्रिया के माध्यम से पुश git परिवर्तन प्राप्त करने की कोशिश कर रहा हूं। Git HTTP क्लाइंट-साइड दक्षता कारणों से चंक्ड ट्रांसफर एन्कोडिंग का लाभ उठाता है

हालाँकि, मैं इसे काम नहीं कर सकता। मैं निम्नलिखित विन्यास मंगलाचरण के साथ डेबियन लेनी पर 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;

(मूल रूप से मैंने इस सवाल को स्टैक ओवरफ्लो में पोस्ट किया था लेकिन यह सलाह दी गई थी कि यह सर्वर दोष के लिए अधिक उपयुक्त है)


1
आपके पास बफ़र्स के साथ-साथ chunked एन्कोडिंग नहीं हो सकती है। बफ़र डेटा भेजने के लिए इंतजार करते हैं, chunked को इसे तुरंत भेजना चाहिए।
मार्टिन फेजोर्डवल्ड

जाहिरा तौर पर Nginx संस्करण 1.3.9 (27/11/2012) के बाद से Chunked का समर्थन करता है। हालाँकि, मुझे अभी भी "411 लंबाई आवश्यक" त्रुटि संदेश मिलते हैं जब एक स्मार्टफोन मेरे नगनेक्स सर्वर पर पोस्ट किए गए POST अनुरोध भेजता है। कोई सुझाव?
मीर

जवाबों:


25

यह एक पुराना सवाल है, मुझे पता है, लेकिन यह समस्या की खोज में आया था (जिसे मैंने दोपहर को हल करने की कोशिश में बिताया है)। मार्टिन एफ की टिप्पणी ने मुझे काम करने के लिए पर्याप्त सुराग दिया!

ट्रिक को proxy_buffering off;आपके लोकेशन ब्लॉक में सेट करना है। यह मानते हुए कि आपका अपस्ट्रीम सर्वर वापस chunked प्रतिक्रियाओं को भेज रहा है, इससे nginx को क्लाइंट को अलग-अलग विखंडू वापस भेजा जाएगा - यहां तक ​​कि अगर आप gzip आउटपुट कम्प्रेशन चालू करते हैं, तो उन्हें फ्लाई पर gzipping भी कर सकते हैं।

ध्यान दें कि बफ़रिंग को बंद करने से अन्य नुकसान हो सकते हैं, इसलिए बिना समझे बफ़रिंग को आँख बंद करके न करें।


9

मैं सुझाव देता हूं कि अपने प्रश्न को स्पष्ट करने के लिए संपादन करें। ठुकराए गए अनुरोधों और ठग जवाबों के बीच एक बड़ा अंतर है। जॉन डाल्टन का उत्तर उत्तरार्द्ध को संबोधित करता है। गिट दोनों करता है।

Nginx वर्तमान में पोस्ट किए गए POST अनुरोधों का समर्थन नहीं करता है और यह पोस्टिंग विषय पर खोज परिणामों में उच्च दिखाता है। जब आप पहले से अपलोड किए जा रहे डेटा की मात्रा को नहीं जानते हैं और अक्सर मोबाइल फोन द्वारा उपयोग किया जाता है, तब ठग पोस्ट अनुरोधों का उपयोग किया जाता है।

एकमात्र कारगर समाधान मुझे यह मिला:

http://wiki.nginx.org/HttpChunkinModule

दुर्भाग्य से यह nginx recompiling की आवश्यकता है क्योंकि nginx लोड करने योग्य मॉड्यूल का समर्थन नहीं करता है।


मैं सहमत हूं: मुझे लग रहा है कि HttpChunkinModule एकमात्र सैद्धांतिक समाधान है ... लेकिन यह मेरी स्थिति में मेरे लिए खुला नहीं है। क्या किसी को पता है कि क्या कुछ और किया जा सकता है? (30 जनवरी 2011 के बाद से कोई बदलाव?)
mdahlman

1
कोई परिवर्तन नहीं जो मुझे पता है। मैं बस एक nginx दूसरे दिन recompilation किया ताकि यह सक्षम करने के लिए।
रोजर बिन्न्स

2

मेरे मामले में ... मैं बहुत सी चीजों की कोशिश करता हूं और अंत में केवल कॉन्फ़िगरेशन को जोड़ने की आवश्यकता है

proxy_http_version 1.1;

और यह काम करता है ...


मुझे जोड़ना था proxy_set_header Connection "";... मूल उत्तर -> forum.nginx.org/read.php?2,247883,247883#msg-247883 से
क्रिश्चियन

यह मेरे लिए भी काम किया। लेकिन मुझे सच में समझ नहीं आता कि क्यों।
जेफ

मेरी अंतिम टिप्पणी के लिए अपडेट करें .... यह काम किया क्योंकि मेरा अपस्ट्रीम सर्वर Chunked Transfer Encoding का उपयोग कर रहा था, जिसे HTTP 1.1 ( en.wikipedia.org/wiki/Chunked_transfer_encoding ) में पेश किया गया था । Nginx प्रॉक्सी के लिए डिफ़ॉल्ट http प्रोटोकॉल संस्करण 1.0 है।
जेफ

1

अन्य उत्तर मान्य होते थे, लेकिन यह एक पुराना प्रश्न है।

ऐसा लगता है कि चंक्ड ट्रांसफ़र प्रति नगीनक्स 1.3.9 [1] का समर्थन किया जाता है, जिसे 2013 के मध्य में जारी किया गया था।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.