अपस्ट्रीम से रिस्पॉन्स हेडर पढ़ते हुए अपस्ट्रीम ने बहुत बड़ा हेडर भेजा


227

मुझे इस प्रकार की त्रुटियां हो रही हैं:

2014/05/24 11:49:06 [त्रुटि] 8376 # 0: * 54031 अपस्ट्रीम ने अपस्ट्रीम, क्लाइंट: 107.21.193.210, सर्वर: aamjanata.com, से अनुरोध पढ़ने के दौरान बहुत बड़े हेडर भेजे, अनुरोध: "GET / /- विचार बदलने-इतिहास प्रायोजित-दर-गुजरात सरकार /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,% 20https: /aamjanata.com/the-brainwash-chronicles- प्रायोजित-दर-गुजरात सरकार /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by- गुजरात सरकार /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government/ ,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,% 20https: / aamjanata।com /-विचार बदलने-इतिहास प्रायोजित-दर-गुजरात सरकार /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,% 20https: /aamjanata.com/the- विचार बदलने-इतिहास प्रायोजित-दर-गुजरात सरकार /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,% 20https: /aamjanata.com/the-brainwash-chronicles- प्रायोजित-दर-गुजरात सरकार /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by- गुजरात सरकार /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government/,%20https: //aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,%20https:/aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government/,%20https:/aamjanata।com /-विचार बदलने-इतिहास प्रायोजित-दर-गुजरात सरकार /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,% 20https: /aamjanata.com/the- विचार बदलने-इतिहास प्रायोजित-दर-गुजरात सरकार /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,% 20https: /aamjanata.com/the-brainwash-chronicles- प्रायोजित-दर-गुजरात सरकार /,% 20ht

हमेशा ऐसा ही होता है। एक यूआरएल बार-बार कॉमा को अलग करते हुए दिखाई देता है। यह क्या कारण है यह पता नहीं लगा सकते। किसी को एक विचार है?

अद्यतन: एक और त्रुटि:

http request count is zero while sending response to client

यहाँ विन्यास है। अन्य अप्रासंगिक चीजें हैं, लेकिन इस हिस्से को जोड़ा गया / संपादित किया गया

fastcgi_cache_path /var/nginx-cache levels=1:2 keys_zone=WORDPRESS:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
proxy_buffer_size   128k;
proxy_buffers   4 256k;
proxy_busy_buffers_size   256k;
    # Upstream to abstract backend connection(s) for PHP.
    upstream php {
            #this should match value of "listen" directive in php-fpm pool
            server unix:/var/run/php5-fpm.sock;
    }

और फिर सर्वर ब्लॉक में: $ Skip_cache 0 सेट करें;

    # POST requests and urls with a query string should always go to PHP
    if ($request_method = POST) {
            set $skip_cache 1;
    }
    if ($query_string != "") {
            set $skip_cache 1;
    }

    # Don't cache uris containing the following segments
    if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml") {
            set $skip_cache 1;
    }

    # Don't use the cache for logged in users or recent commenters
    if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
            set $skip_cache 1;
    }

    location / {
            # This is cool because no php is touched for static content.
            # include the "?$args" part so non-default permalinks doesn't break when using query string
            try_files $uri $uri/ /index.php?$args;
    }


    location ~ \.php$ {
            try_files $uri /index.php;
            include fastcgi_params;
            fastcgi_pass php;
            fastcgi_read_timeout 3000;

            fastcgi_cache_bypass $skip_cache;
            fastcgi_no_cache $skip_cache;

            fastcgi_cache WORDPRESS;
            fastcgi_cache_valid  60m;
    }

    location ~ /purge(/.*) {
        fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1";
    }`

आपका प्रॉक्सी कॉन्फिग सही नहीं है। क्या आप विन्यास साझा कर सकते हैं?
नव

क्या आप जोड़ने की कोशिश कर सकते हैं: fastcgi_buffers 16 16k; fastcgi_buffer_size 32k;
नव

जवाबों:


406

अपनी गोपनीय फ़ाइल में निम्न जोड़ें

fastcgi_buffers 16 16k; 
fastcgi_buffer_size 32k;

160
जबकि आपके उत्तर ने मुझे सही प्रतिक्रिया के लिए प्रेरित किया, आपको यह दिखाना चाहिए कि सही बफर आकारों का निर्धारण कैसे किया जाता है और यह क्यों मायने रखता है। अन्यथा यह अंधेरे में एक गोली है। आकार देने पर विचार प्राप्त करने के लिए यहां देखें: gist.github.com/magnetikonline/…
वेस जॉनसन

4
"fastcgi_buffer_size 32k?" अकेले काम नहीं किया, मुझे NginX को पुनः आरंभ करने के लिए दोनों लाइनों की आवश्यकता थी। मैं एक WordPress प्लगइन की वजह से NginX के साथ 502 त्रुटि के कारण यहां आया था।
पीजे ब्रुनेट

6
यदि fast_cgi_buffersमदद न करें, तो proxy_buffers नीचे दिए गए उत्तर को @amd
icc97

11
कृपया इस उत्तर पर कोई स्पष्टीकरण दें।
एडसन होरासियो जूनियर

5
मेरे लिए इसका काम करता है, मैं बस इतना जोड़ना चाहता हूं कि ubuntu 16.04 में nginx कॉन्फ़िगरेशन फ़ाइल स्थित है /etc/nginx/nginx.confऔर मान http के अंदर जाना चाहिए {...}
मारियो

134

यदि nginx एक प्रॉक्सी / रिवर्स प्रॉक्सी के रूप में चल रहा है

यह उपयोगकर्ताओं के लिए है ngx_http_proxy_module

इसके अलावा fastcgi, proxyमॉड्यूल अस्थायी बफर में अनुरोध हेडर को भी बचाता है।

इसलिए आपको इसे proxy_buffer_sizeऔर बढ़ाने proxy_buffersया इसे पूरी तरह से अक्षम करने की आवश्यकता हो सकती है (कृपया nginx प्रलेखन पढ़ें )।

प्रॉक्सी बफरिंग कॉन्फ़िगरेशन का उदाहरण

http {
  proxy_buffer_size   128k;
  proxy_buffers   4 256k;
  proxy_busy_buffers_size   256k;
}

अपने प्रॉक्सी बफ़र को अक्षम करने का उदाहरण (लंबे पोलिंग सर्वर के लिए अनुशंसित)

http {
  proxy_buffering off;
}

अधिक जानकारी के लिए: Nginx प्रॉक्सी मॉड्यूल प्रलेखन


8
"xy_busy_buffers_size "सभी" प्रॉक्सी_बफर्स ​​"के आकार से कम होना चाहिए" शून्य से एक बफ़र
chovy

तुम आदमी हो! धन्यवाद! पहला विकल्प रेल एप्लिकेशन पर मेरे रूबी में काम किया
नेज़िर

शायद एक मूर्खतापूर्ण सवाल है, लेकिन मेरे पास सर्वर के सामने एक प्रॉक्सी है जो इस त्रुटि को वापस कर रहा है। बफर बदलने से काम हुआ, लेकिन मुझे अंदर की मशीन पर एक नई त्रुटि मिली। writev() failed (104: Connection reset by peer) while sending to client क्या वो प्रॉक्सी सेटिंग्स संभवतः उस त्रुटि को ठीक कर देगी, और क्या वह अपस्ट्रीम सर्वर या प्रॉक्सी पर जाएगी?
एडम पैटरसन

1
क्यों proxy_buffers 4 ...? चूंकि डिफ़ॉल्ट लगता है 8
adrianTNT

23

upstream sent too big header while reading response header from upstream "मैं जो देख रहा हूँ, वह मुझे पसंद नहीं है"

  1. आपका अपस्ट्रीम सर्वर थ्रेड क्रैश हो गया
  2. अपस्ट्रीम सर्वर ने एक अमान्य हेडर वापस भेजा
  3. STDERR से भेजे गए नोटिस / चेतावनियों ने उनके बफर को ओवरफ्लो कर दिया और यह और STDOUT दोनों बंद हो गए

3: संदेश के ऊपर त्रुटि लॉग देखें, क्या यह संदेश से पहले लॉग की गई लाइनों के साथ स्ट्रीमिंग है? PHP message: PHP Notice: Undefined index: उदाहरण लूप मेरी लॉग फ़ाइल से स्निपेट:

2015/11/23 10:30:02 [error] 32451#0: *580927 FastCGI sent in stderr: "PHP message: PHP Notice:  Undefined index: Firstname in /srv/www/classes/data_convert.php on line 1090
PHP message: PHP Notice:  Undefined index: Lastname in /srv/www/classes/data_convert.php on line 1090
... // 20 lines of same
PHP message: PHP Notice:  Undefined index: Firstname in /srv/www/classes/data_convert.php on line 1090
PHP message: PHP Notice:  Undefined index: Lastname in /srv/www/classes/data_convert.php on line 1090
PHP message: PHP Notice:  Undef
2015/11/23 10:30:02 [error] 32451#0: *580927 FastCGI sent in stderr: "ta_convert.php on line 1090
PHP message: PHP Notice:  Undefined index: Firstname

आप नीचे से तीसरी पंक्ति में देख सकते हैं कि बफर सीमा को मारा गया था, टूट गया था, और अगले धागे ने उस पर लिखा था। Nginx ने फिर कनेक्शन बंद कर दिया और क्लाइंट को 502 लौटा दिए।

2: अनुरोध के अनुसार भेजे गए सभी शीर्ष लेखों को लॉग इन करें, उनकी समीक्षा करें और सुनिश्चित करें कि वे मानकों के अनुरूप हैं (नग्नेक्स एक कुकी को हटाने / समाप्त करने के लिए 24 घंटे से अधिक पुरानी किसी भी चीज़ की अनुमति नहीं देता है, अमान्य सामग्री लंबाई भेज रहा है क्योंकि सामग्री की गिनती से पहले त्रुटि संदेश बफ़र किए गए थे। ..)। getallheaders फ़ंक्शन कॉल आमतौर पर सार कोड स्थितियों में मदद कर सकता है php सभी हेडर प्राप्त करता है

उदाहरणों में शामिल:

<?php
//expire cookie
setcookie ( 'bookmark', '', strtotime('2012-01-01 00:00:00') );
// nginx will refuse this header response, too far past to accept
....
?>

और इस:

<?php
header('Content-type: image/jpg');
?>

<?php   //a space was injected into the output above this line
header('Content-length: ' . filesize('image.jpg') );
echo file_get_contents('image.jpg');
// error! the response is now 1-byte longer than header!!
?>

1: यह सुनिश्चित करने के लिए कि आपका धागा सही अंतिम बिंदु तक पहुंच रहा है या पूरा होने से पहले बाहर नहीं निकल रहा है, एक स्क्रिप्ट लॉग को सत्यापित या बना लें।


3
इस उत्तर ने सिर में कील ठोक दी। कभी-कभी यह सिर्फ नगनेक्स का कॉन्फ़िगरेशन नहीं है, लेकिन वास्तव में हेडर का उत्पादन क्या है। जब error_reporting में नोटिस होते हैं, लेकिन php.ini में display_errors बंद होते हैं, तो सभी संदेश सामग्री के बजाय FCGI हेडर में दिखाई देते हैं।
शिएन

17

Plesk निर्देश

Plesk 12 में, मैंने रिवर्स प्रॉक्सी के रूप में nginx को चलाया था (जो मुझे लगता है कि डिफ़ॉल्ट है)। तो वर्तमान शीर्ष उत्तर काम नहीं करता है क्योंकि nginx को प्रॉक्सी के रूप में भी चलाया जा रहा है।

मैं गया Subscriptions | [subscription domain] | Websites & Domains (tab) | [Virtual Host domain] | Web Server Settings

फिर उस पृष्ठ के निचले भाग में आप अतिरिक्त nginx निर्देश सेट कर सकते हैं, जिसे मैंने यहां शीर्ष दो उत्तरों के संयोजन के रूप में सेट किया है:

fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
proxy_buffer_size   128k;
proxy_buffers   4 256k;
proxy_busy_buffers_size   256k;

1
कहाँ पे? कौन सा विन्यास?
रेडसेंड्रो

@Redsandro अगर आप इसे नहीं ढूंढ सकते हैं Subscriptions | [subscription domain] | Websites & Domains (tab) | [Virtual Host domain] | Web Server Settingsतो मुझे यकीन नहीं है कि आपका क्या मतलब है?
icc97

यह मेरे लिए समाधान था: डोमेन> डोमेन नाम> अपाचे और nginx सेटिंग्स> अतिरिक्त nginx निर्देश Plesk गोमेद संस्करण 17.8.11
dijkstra8x

1
मैंने इसे एक नई फ़ाइल में जोड़ा /etc/nginx/conf.d/proxy.confऔर nginx को पुनः आरंभ किया, यह ठीक काम करता है, धन्यवाद!
रूबों 7

6

यदि आप Symfony ढांचे का उपयोग कर रहे हैं: Nginx कॉन्फ़िगरेशन के साथ गड़बड़ करने से पहले, ChromePHP को पहले अक्षम करने का प्रयास करें।

1 - ओपन एप / config / config_dev.yml

2 - इन पंक्तियों पर टिप्पणी करें:

#chromephp:
    #type:   chromephp
    #level:  info

ChromePHP ने X-ChromePhp-Data हैडर में डिबग इंफोन्स को एन्कोड किया गया है, जो कि फास्टनेगी के साथ nginx के डिफॉल्ट कॉन्फिग के लिए बहुत बड़ा है।

स्रोत: https://github.com/symfony/symfony/issues/8413#issuecomment-204344848


3

हमने महसूस किया कि हमारा एक सर्वर जो यह अनुभव कर रहा था, उसने phpm त्रुटियों / चेतावनियों / नोटिफ़िकेशन का भंडाफोड़ कर दिया था, जिन्हें सामान्यतः डिस्क में लॉग इन किया जा सकता था, एफसीजीआई सॉकेट पर भेजा जा रहा था। ऐसा लगता है कि हेडर का हिस्सा बफर चंक्स में विभाजित होने पर एक पार्सिंग बग है।

तो php_admin_value[error_log]वास्तव में लिखने योग्य और php-fpm को पुनः आरंभ करने के लिए समस्या को ठीक करने के लिए पर्याप्त था।

हम एक छोटी स्क्रिप्ट के साथ समस्या को पुन: उत्पन्न कर सकते हैं:

<?php
for ($i = 0; $i<$_GET['iterations']; $i++)
    error_log(str_pad("a", $_GET['size'], "a"));
echo "got here\n";

बफ़र्स को उठाना 502s को हिट करने के लिए कठिन बना दिया, लेकिन असंभव नहीं, उदाहरण के लिए देशी:

bash-4.1# for it in {30..200..3}; do for size in {100..250..3}; do echo "size=$size iterations=$it $(curl -sv "http://localhost/debug.php?size=$size&iterations=$it" 2>&1 | egrep '^< HTTP')"; done; done | grep 502 | head
size=121 iterations=30 < HTTP/1.1 502 Bad Gateway
size=109 iterations=33 < HTTP/1.1 502 Bad Gateway
size=232 iterations=33 < HTTP/1.1 502 Bad Gateway
size=241 iterations=48 < HTTP/1.1 502 Bad Gateway
size=145 iterations=51 < HTTP/1.1 502 Bad Gateway
size=226 iterations=51 < HTTP/1.1 502 Bad Gateway
size=190 iterations=60 < HTTP/1.1 502 Bad Gateway
size=115 iterations=63 < HTTP/1.1 502 Bad Gateway
size=109 iterations=66 < HTTP/1.1 502 Bad Gateway
size=163 iterations=69 < HTTP/1.1 502 Bad Gateway
[... there would be more here, but I piped through head ...]

fastcgi_buffers 16 16k; fastcgi_buffer_size 32k;:

bash-4.1# for it in {30..200..3}; do for size in {100..250..3}; do echo "size=$size iterations=$it $(curl -sv "http://localhost/debug.php?size=$size&iterations=$it" 2>&1 | egrep '^< HTTP')"; done; done | grep 502 | head
size=223 iterations=69 < HTTP/1.1 502 Bad Gateway
size=184 iterations=165 < HTTP/1.1 502 Bad Gateway
size=151 iterations=198 < HTTP/1.1 502 Bad Gateway

इसलिए मेरा मानना ​​है कि सही उत्तर है: अपने fpm कॉन्फिग को ठीक करें ताकि यह डिस्क में त्रुटियों को लॉग करे।


1

यह त्रुटि खोजते समय Google पर अभी भी सबसे अधिक SO-question है, तो चलिए इसे टक्कर देते हैं।

जब यह त्रुटि हो रही है और तुरंत एनजीआईएनएक्स सेटिंग्स में डीप-डाइव नहीं करना चाहते हैं, तो आप डिबग कंसोल पर अपने आउटपुट की जांच करना चाह सकते हैं। मेरे मामले में मैं FirePHP / Chromelogger कंसोल पर पाठ का भार बढ़ा रहा था, और चूंकि यह सब हेडर के रूप में भेजा गया था, इसलिए यह अतिप्रवाह का कारण बन रहा था।

यदि यह त्रुटि केवल लॉग संदेशों की विस्मित मात्रा भेजने के कारण होती है, तो वेबसर्वर सेटिंग्स को बदलने की आवश्यकता नहीं हो सकती है।


0

मुझे यकीन नहीं है कि यह मुद्दा है कि हेडर पीएचपी क्या भेज रहा है से संबंधित है। सुनिश्चित करें कि बफरिंग सक्षम है। एक छद्म फाइल बनाने का सरल तरीका है:

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_buffering         on;
proxy_buffer_size       128k;
proxy_buffers           4 256k;
proxy_busy_buffers_size 256k;

और एक फफूंदी .conf फ़ाइल:

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;
fastcgi_buffers 128 4096k;
fastcgi_buffer_size 4096k;
fastcgi_index  index.php;
fastcgi_param  REDIRECT_STATUS    200;

आगे आपको उन्हें अपने डिफ़ॉल्ट कॉन्फिग सर्वर में इस तरह से कॉल करना होगा:

http {
  include    /etc/nginx/mime.types;
  include    /etc/nginx/proxy.conf;
  include    /etc/nginx/fastcgi.conf;
  index    index.html index.htm index.php;
  log_format   main '$remote_addr - $remote_user [$time_local]  $status '
    '"$request" $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for"';
  #access_log   /logs/access.log  main;
  sendfile     on;
  tcp_nopush   on;
 # ........
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.