it-swarm.com.de

Wie verhindere ich ein Gateway-Timeout mit FastCGI unter Nginx?

Ich verwende Django, FastCGI und Nginx. Ich erstelle eine Art API, in der jemand einige Daten über XML senden kann, die ich verarbeiten und dann einige Statuscodes für jeden Knoten zurückgeben kann, über den gesendet wurde.

Das Problem ist, dass Nginx eine 504 Gateway-Zeitüberschreitung auslöst, wenn die XML-Verarbeitung zu lange dauert. Ich denke, dies dauert länger als 60 Sekunden.

Daher möchte ich Nginx so einrichten, dass bei Anfragen, die mit dem Speicherort/API übereinstimmen, keine Zeitüberschreitung von 120 Sekunden auftritt. Welche Einstellung wird das erreichen.

Was ich bisher habe ist:

    # Handles all api calls
    location ^~ /api/ {
        proxy_read_timeout 120;
        proxy_connect_timeout 120;
        fastcgi_pass 127.0.0.1:8080;
    }

Edit: Was ich habe, funktioniert nicht :)

198
sheats

Proxy-Timeouts sind gut, für Proxys, nicht für FastCGI ...

Die Direktiven, die FastCGI-Timeouts betreffen, sind client_header_timeout, client_body_timeout und send_timeout.

Bearbeiten : In Anbetracht dessen, was im nginx-Wiki zu finden ist, ist die send_timeout-Direktive verantwortlich für das Festlegen des allgemeinen Timeouts der Antwort (das war etwas irreführend). Für FastCGI gibt es fastcgi_read_timeout, was das Zeitlimit für die Antwort des Fastcgi-Prozesses beeinflusst .

HTH.

243
zgoda

Wenn Sie Nginx mit Unicorn und Rails verwenden, liegt die Zeitüberschreitung höchstwahrscheinlich in Ihrem Unicorn.rb Datei

legen Sie eine große Zeitüberschreitung in Unicorn.rb

timeout 500

wenn Sie immer noch Probleme haben, versuchen Sie, in Ihrem Upstream in nginx fail_timeout = 0 zu haben, und prüfen Sie, ob dies Ihr Problem behebt. Dies dient Debugging-Zwecken und kann in einer Produktionsumgebung gefährlich sein.

upstream foo_server {
        server 127.0.0.1:3000 fail_timeout=0;
}
23
Abdo

Fügen Sie im Abschnitt http nginx (/etc/nginx/nginx.conf) Folgendes hinzu oder ändern Sie Folgendes:

keepalive_timeout 300s

Fügen Sie im Abschnitt server nginx (/etc/nginx/sites-available/your-config-file.com) diese Zeilen hinzu:

client_max_body_size 50M;
fastcgi_buffers 8 1600k;
fastcgi_buffer_size 3200k;
fastcgi_connect_timeout 300s;
fastcgi_send_timeout 300s;
fastcgi_read_timeout 300s;

In php Datei im Fall 127.0.0.1:9000 (/etc/php/7.X/fpm/pool.d/www.conf) modify:

request_terminate_timeout = 300

Ich hoffe dir zu helfen.

Wenn Sie Unicorn verwenden.

Schauen Sie sich top auf Ihrem Server an. Unicorn verwendet derzeit wahrscheinlich 100% der CPU. Es gibt mehrere Gründe für dieses Problem.

  • Sie sollten Ihre HTTP-Anforderungen überprüfen, einige davon können sehr schwierig sein.

  • Überprüfen Sie Unicorns Version. Möglicherweise haben Sie es vor kurzem aktualisiert und etwas war defekt.

1