yukarı akış yukarı yanıt başlığını okurken çok büyük başlık gönderdi


228

Bu tür hatalar alıyorum:

2014/05/24 11:49:06 [hata] 8376 # 0: * 54031 yukarı akış yukarı akıştan yanıt başlığını okurken çok büyük başlık gönderdi, istemci: 107.21.193.210, sunucu: aamjanata.com, istek: "GET / the- beyin yıkamak-chronicles destekli-by-gujarat-devlet /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,% 20https: /aamjanata.com/the-brainwash-chronicles- sponsor-by-gujarat-hükümet /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by- gujarat-hükümet /,% 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 /-beyin yıkamak-chronicles destekli-by-gujarat-devlet /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,% 20https: /aamjanata.com/the- beyin yıkamak-chronicles destekli-by-gujarat-devlet /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,% 20https: /aamjanata.com/the-brainwash-chronicles- sponsor-by-gujarat-hükümet /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by- gujarat-hükümet /,% 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 /-beyin yıkamak-chronicles destekli-by-gujarat-devlet /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,% 20https: /aamjanata.com/the- beyin yıkamak-chronicles destekli-by-gujarat-devlet /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,% 20https: /aamjanata.com/the-brainwash-chronicles- sponsor-by-gujarat-devlet /,% 20ht

Her zaman aynıdır. Bir url virgülle ayırılarak tekrar tekrar tekrarlandı. Buna neyin sebep olduğunu bulamıyorum. Kimsenin bir fikri var mı?

Güncelleme: Başka bir hata:

http request count is zero while sending response to client

İşte yapılandırma. Alakasız başka şeyler de var, ancak bu bölüm eklendi / düzenlendi

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

Ve sonra sunucu bloğunda: $ 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";
    }`

proxy yapılandırmanız doğru görünmüyor. Yapılandırmayı paylaşabilir misiniz?
Neo

eklemeyi deneyebilirsin: fastcgi_buffers 16 16k; fastcgi_buffer_size 32k;
Neo

Yanıtlar:


407

Conf dosyanıza aşağıdakileri ekleyin

fastcgi_buffers 16 16k; 
fastcgi_buffer_size 32k;

161
Cevabınız beni doğru yanıta götürürken, doğru tampon boyutlarının nasıl belirleneceğini ve bunun neden önemli olduğunu göstermelisiniz. Aksi takdirde karanlıkta bir atış. Boyutlandırma hakkında bir fikir edinmek için buraya bakın: gist.github.com/magnetikonline/…
Wes Johnson

4
"fastcgi_buffer_size 32k;" yalnız işe yaramadı, NginX yeniden başlatmak için her iki satır gerekiyordu. Buraya bir WordPress eklentisinin neden olduğu NginX ile ilgili 502 hatası nedeniyle geldim.
PJ Brunet

6
Eğer fast_cgi_buffersyardım etmezseniz, @amdproxy_buffers
icc97

11
Bu cevapla ilgili herhangi bir açıklama lütfen.
Edson Horacio Junior

5
Onun için çalışır, ben sadece ubuntu 16.04 nginx yapılandırma dosyası bulunan /etc/nginx/nginx.confve değerleri http {...}
Mario

134

Nginx bir proxy / ters proxy olarak çalışıyorsa

yani, kullanıcıları için ngx_http_proxy_module

Ek olarak fastcgi , proxymodül ayrıca istek başlığını geçici bir ara belleğe kaydeder.

Bu nedenle, proxy_buffer_sizeve değerini artırmanız proxy_buffersveya tamamen devre dışı bırakmanız gerekebilir (Lütfen okuyun nginx belgelerini ).

Proxy arabelleğe alma yapılandırmasına örnek

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

Proxy tamponunuzu devre dışı bırakma örneği (uzun yoklama sunucuları için önerilir)

http {
  proxy_buffering off;
}

Daha fazla bilgi için: Nginx proxy modülü belgeleri


8
"proxy_busy_buffers_size", "proxy_buffers" eksi bir arabellek boyutundan küçük olmalıdır
chovy

adamsın! Teşekkürler! ilk seçenek benim yakut raylar app çalıştı
Nezir

Muhtemelen aptalca bir soru, ama sunucunun önünde bu hatayı döndüren bir proxy var. Arabelleği değiştirmek işe yaradı, ancak iç makinede yeni bir hata alıyorum. writev() failed (104: Connection reset by peer) while sending to client Bu proxy ayarları muhtemelen bu hatayı düzeltir ve akış yukarı sunucuya veya proxy'ye gider mi?
Adam Patterson

1
Neden proxy_buffers 4 ...? Varsayılan 8 olduğu için
adrianTNT

23

upstream sent too big header while reading response header from upstream nginx'in "Gördüğümü sevmiyorum" demenin genel yolu

  1. Akış yukarı sunucu iş parçanız çöktü
  2. Akış yukarı sunucu geçersiz bir başlık gönderdi
  3. STDERR'den gönderilen Bildirim / Uyarılar arabelleklerini aştı ve hem kendisi hem de STDOUT kapatıldı

3: Mesajın üstündeki hata günlüklerine bakın, mesajdan önce kaydedilmiş satırlarla mı akış yapıyor? PHP message: PHP Notice: Undefined index: Günlük dosyamdan bir döngüden örnek snippet:

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

alt satırdan 3. satırda arabellek sınırının vurulduğunu, kırıldığını ve bir sonraki iş parçacığının üzerine yazdığını görebilirsiniz. Nginx daha sonra bağlantıyı kapattı ve istemciye 502'yi geri verdi.

2: istek başına gönderilen tüm üstbilgileri günlüğe kaydedin, bunları gözden geçirin ve standartlara uygun olduklarından emin olun (nginx, içerik sayılmadan önce hata iletileri arabelleğe alındığı için geçersiz içerik uzunluğu göndererek bir çerezi silmeye / süresine izin vermez. ..). getallheaders işlev çağrısı genellikle soyut kod durumlarda php tüm üstbilgileri almak yardımcı olabilir

örnekler şunları içerir:

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

ve bu:

<?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: iş parçacığınızın doğru bitiş noktasına ulaştığından ve tamamlanmadan önce çıkmadığından emin olmak için bir komut dosyası günlüğü doğrulayın veya oluşturun.


3
Bu cevap kafasındaki çiviye çarptı. Bazen sadece nginx'in konfigürasyonu değil, aslında başlığı üreten şey budur. Error_reporting bildirimleri içerdiğinde ancak php.ini dosyasında display_errors kapalı olduğunda, tüm iletiler içerik yerine FCGI üstbilgisinde gösterilir.
Schien

17

Plesk talimatları

Plesk 12'de, ters proxy olarak çalışan nginx vardı (varsayılan olduğunu düşünüyorum). Yani nginx bir proxy olarak çalıştırıldığı için mevcut en iyi cevap çalışmıyor.

Ben gittim Subscriptions | [subscription domain] | Websites & Domains (tab) | [Virtual Host domain] | Web Server Settings.

Ardından, bu sayfanın alt kısmında , en iyi iki cevabın bir kombinasyonu olarak ayarladığım Ek nginx yönergelerini ayarlayabilirsiniz:

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

1
Nerede? Hangi yapılandırma?
Redsandro

@Redsandro Eğer bulamıyorsanız o Subscriptions | [subscription domain] | Websites & Domains (tab) | [Virtual Host domain] | Web Server Settingszaman ne demek istediğinden emin değilim?
icc97

benim için çözüm buydu: Alanlar> Alan adı> Apache & nginx Ayarları> Ek nginx yönergeleri Plesk Onyx Sürüm 17.8.11
dijkstra8x

1
Bunu yeni bir dosyaya ekledim /etc/nginx/conf.d/proxy.confve nginx'i yeniden başlattım, iyi çalışıyor, teşekkürler!
rubo77

6

Symfony framework kullanıyorsanız: Nginx config ile uğraşmadan önce ChromePHP'yi devre dışı bırakmayı deneyin.

1 - app / config / config_dev.yml dosyasını açın

2 - Bu satırları yorumlayın:

#chromephp:
    #type:   chromephp
    #level:  info

ChromePHP, nginx'in fastcgi ile varsayılan yapılandırması için çok büyük olan X-ChromePhp-Data başlığında json ile kodlanmış hata ayıklama bilgilerini paketler.

Kaynak: https://github.com/symfony/symfony/issues/8413#issuecomment-20412848


3

Bunu deneyimleyen sunucumuzun normalde diske kaydedilen php hataları / uyarıları / bildirimleriyle sonuçlanan fpm yapılandırmasını bozduğunu fark ettik. Başlığın bir kısmı arabellek parçaları arasında bölündüğünde bir ayrıştırma hatası var gibi görünüyor.

Yani php_admin_value[error_log] aslında yazılabilir bir şey ve php-fpm yeniden başlatmak sorunu çözmek için yeterliydi.

Sorunu daha küçük bir komut dosyasıyla yeniden oluşturabiliriz:

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

Tamponları yükseltmek 502'leri vurmayı zorlaştırdı, ancak imkansız değil, örneğin yerli:

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

Bu yüzden doğru cevap olduğuna inanıyorum: hataları diske kaydedecek şekilde fpm configinizi düzeltin.


1

Bu, bu hatayı ararken Google'daki en yüksek SO sorusudur, bu yüzden hadi çarptıralım.

Bu hatayı alırken ve hemen NGINX ayarlarına derinlemesine dalmak istemediğinizde, hata ayıklama konsoluna çıkışlarınızı kontrol etmek isteyebilirsiniz. Benim durumumda, FirePHP / Chromelogger konsoluna bir sürü metin çıkıyordum ve bunların hepsi başlık olarak gönderildiğinden taşmaya neden oluyordu.

Bu hataya sadece çok sayıda günlük mesajı göndermekten kaynaklanıyorsa, web sunucusu ayarlarının değiştirilmesi gerekli olmayabilir.


0

Sorunun php ne başlık ile ilgili olduğundan emin değilim. Arabelleğe almanın etkinleştirildiğinden emin olun. Bunun basit yolu bir proxy.conf dosyası oluşturmaktır:

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;

Ve bir fascgi.conf dosyası:

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;

Sonra bunları varsayılan yapılandırma sunucunuzda şu şekilde çağırmanız gerekir:

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;
 # ........
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.