NGINX: time-out upstream (110: time-out verbinding) tijdens het lezen van responsheader van upstream

Ik heb Puma als de upstream-app-server en Riak als mijn db-cluster op de achtergrond. Wanneer ik een verzoek stuur dat een stuk gegevens voor ongeveer 25.000 gebruikers verkleint en het terugstuurt van Riak naar de app, krijg ik een foutmelding in het Nginx-logboek:

upstream-time-out (110: time-out verbinding) tijdens lezen
reactiekop van stroomopwaarts

Als ik mijn upstream rechtstreeks zonder nginx-proxy opvraag, met hetzelfde verzoek, krijg ik de vereiste gegevens.

De Nginx-time-out treedt op zodra de proxy is geplaatst.

**nginx.conf**
http {
    keepalive_timeout 10m;
    proxy_connect_timeout  600s;
    proxy_send_timeout  600s;
    proxy_read_timeout  600s;
    fastcgi_send_timeout 600s;
    fastcgi_read_timeout 600s;
    include /etc/nginx/sites-enabled/*.conf;
}
**virtual host conf**
upstream ss_api {
  server 127.0.0.1:3000 max_fails=0  fail_timeout=600;
}
server {
  listen 81;
  server_name xxxxx.com; # change to match your URL
  location / {
    # match the name of upstream directive which is defined above
    proxy_pass http://ss_api; 
    proxy_set_header  Host $http_host;
    proxy_set_header  X-Real-IP  $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_cache cloud;
    proxy_cache_valid  200 302  60m;
    proxy_cache_valid  404      1m;
    proxy_cache_bypass $http_authorization;
    proxy_cache_bypass http://ss_api/account/;
    add_header X-Cache-Status $upstream_cache_status;
  }
}

Nginx heeft een aantal time-outrichtlijnen. Ik weet niet of ik iets belangrijks over het hoofd zie. Alle hulp wordt zeer op prijs gesteld….


Antwoord 1, autoriteit 100%

Dit gebeurt omdat uw upstream te veel tijd nodig heeft om het verzoek te beantwoorden en NGINX denkt dat de upstream het verzoek al niet heeft verwerkt, dus reageert het met een fout.
Voeg gewoon proxy_read_timeout toe en verhoog deze in het configuratieblok location.
Mij is hetzelfde overkomen en ik gebruikte een time-out van 1 uur voor een interne app op het werk:

proxy_read_timeout 3600;

Hiermee wacht NGINX een uur (3600s) totdat de stroomopwaarts iets teruggeeft.


Antwoord 2, autoriteit 71%

Je moet altijd afzien van het verhogen van de time-outs, ik betwijfel of de reactietijd van je backend-server hier in ieder geval het probleem is.

Ik heb dit probleem omzeild door de keep-alive-vlag van de verbinding te wissen en de http-versie op te geven volgens het antwoord hier:
https://stackoverflow.com/a/36589120/479632

server {
    location / {
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        # these two lines here
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_pass http://localhost:5000;
    }
}

Helaas kan ik niet uitleggen waarom dit werkt en ik ben er ook niet in geslaagd om het te ontcijferen uit de documenten die worden genoemd in het gelinkte antwoord, dus als iemand een verklaring heeft, hoor ik het graag.


Antwoord 3, autoriteit 58%

Bepaal eerst welke stroomopwaarts vertraagt door het nginx-foutlogboek te raadplegen
bestand en pas de leestime-out dienovereenkomstig aan
in mijn geval was het fastCGI

2017/09/27 13:34:03 [error] 16559#16559: *14381 upstream timed out (110: Connection timed out) while reading response header from upstream, client:xxxxxxxxxxxxxxxxxxxxxxxxx", upstream: "fastcgi://unix:/var/run/php/php5.6-fpm.sock", host: "xxxxxxxxxxxxxxx", referrer: "xxxxxxxxxxxxxxxxxxxx"

Dus ik moet de fastcgi_read_timeout in mijn server configuratie

aanpassen

location ~ \.php$ {
     fastcgi_read_timeout 240;
     ...
 }

Zie: originele post


Antwoord 4, Autoriteit 23%

In uw geval helpt het een beetje optimalisatie proxy, of u kunt gebruik maken van “# time-out instellingen”

location / 
{        
  # time out settings
  proxy_connect_timeout 159s;
  proxy_send_timeout   600;
  proxy_read_timeout   600;
  proxy_buffer_size    64k;
  proxy_buffers     16 32k;
  proxy_busy_buffers_size 64k;
  proxy_temp_file_write_size 64k;
  proxy_pass_header Set-Cookie;
  proxy_redirect     off;
  proxy_hide_header  Vary;
  proxy_set_header   Accept-Encoding '';
  proxy_ignore_headers Cache-Control Expires;
  proxy_set_header   Referer $http_referer;
  proxy_set_header   Host   $host;
  proxy_set_header   Cookie $http_cookie;
  proxy_set_header   X-Real-IP  $remote_addr;
  proxy_set_header X-Forwarded-Host $host;
  proxy_set_header X-Forwarded-Server $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Antwoord 5, Autoriteit 17%

I zou om de error_logs, specifiek op het upstream voorzover hierin specifieke stroomopwaartse die timing is gebleken.

Dan gebaseerd op die u kunt aanpassen proxy_read_timeout, fastcgi_read_timeoutof uwsgi_read_timeout.

Zorg er ook voor dat uw configuratie is geladen.

hier meer details nginx upstream time-out (waarom en hoe te repareren )


Antwoord 6, Autoriteit 16%

Ik denk dat deze fout om verschillende redenen kan gebeuren, maar het kan specifiek zijn voor de module die u gebruikt. Ik zag dit bijvoorbeeld met behulp van de UWSGI-module, dus moest “Uwsgi_read_Timeout” instellen.


Antwoord 7, Autoriteit 10%

Zoals vele anderen hier hebben opgemerkt, kan het verhogen van de time-outinstellingen voor NGINX uw probleem oplossen.

Het verhogen van uw time-outinstellingen is misschien niet zo eenvoudig, omdat veel van deze antwoorden suggereren. Ik heb zelf geconfronteerd met dit probleem en probeerde mijn time-outinstellingen in het /etc/nginx/nginx.conf -bestand te veranderen, zoals bijna iedereen in deze threads suggereert. Dit hielp me niet een enkel beetje; Er was geen schijnbare verandering in de time-outinstellingen van NGINX. Nu, vele uren later slaagde ik erin om dit probleem op te lossen.

De oplossing ligt in dit Forum thread , en wat het zegt, is dat u uw time-outinstellingen in /etc/nginx/conf.d/timeout.conf (en indien dit (en indien dit (en indien dit) (en Bestand bestaat niet, u moet het maken). Ik heb dezelfde instellingen gebruikt zoals gesuggereerd in de draad:

proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;

Antwoord 8, Autoriteit 3%

Ik had hetzelfde probleem en resulteerde dat dat een fout “elke dag” was in de rails-controller. Ik weet niet waarom, maar op productie, PUMA voert de fout weer en opnieuw veroorzaakt het bericht:

Upstream Time-out (110: Verbinding time-out) tijdens het lezen van respons header van stroomopwaarts

Waarschijnlijk omdat Nginx keer op keer de gegevens van puma probeert te krijgen. Het grappige is dat de fout het time-outbericht veroorzaakte, zelfs als ik een andere actie in de controller aanroep, dus een enkele typfout blokkeert de hele app .

Controleer uw log/puma.stderr.log-bestand om te zien of dat het geval is.


Antwoord 9

Van onze kant gebruikte het spdy met proxycache. Wanneer de cache verloopt, krijgen we deze foutmelding totdat de cache is bijgewerkt.


Antwoord 10

Hopelijk helpt het iemand:
Ik kwam deze fout tegen en de oorzaak was verkeerde toestemming op de logmap voor phpfpm, nadat ik deze had gewijzigd zodat phpfpm ernaar kon schrijven, was alles in orde.


Antwoord 11

Voor de time-out proxy_upstreamheb ik de bovenstaande instelling geprobeerd, maar deze werkten niet.

Het instellen van resolver_timeoutwerkte voor mij, wetende dat het 30 seconden duurde om het upstream time-outbericht te produceren. bijv. me.atwibble.com kan niet worden opgelost (110: time-out voor bewerking).

http://nginx.org/en/docs/http/ngx_http_core_module .html#resolver_timeout


Antwoord 12

Controleer ook de keepalive_timeoutvan de upstream-server.

Ik heb een soortgelijk probleem: willekeurige 502, met Connection reset by peer-fouten in nginx-logboeken, die plaatsvonden wanneer de server zwaar werd belast. Uiteindelijk bleek dat het werd veroorzaakt door een mismatch tussen nginx’ en upstream’s (gunicorn in mijn geval) keepalive_timeoutwaarden. Nginx was op 75s en stroomopwaarts slechts een paar seconden. Dit zorgde ervoor dat stroomopwaarts soms in time-out viel en de verbinding verbrak, terwijl nginx niet begreep waarom.

Het verhogen van de upstream-serverwaarde om overeen te komen met nginx’ one loste het probleem op.


Antwoord 13

NIEUW Voeg een regelconfiguratie toe aan locatie of nginx.conf, bijvoorbeeld:
proxy_read_timeout 900s;

Other episodes