Detaillierte Erläuterung der Nginx-Timeout-Konfiguration

Detaillierte Erläuterung der Nginx-Timeout-Konfiguration

Ich habe kürzlich in einem Projekt nginx und im Backend Java verwendet. Dabei stellte ich fest, dass die Verarbeitung einer Anfrage im Backend mehr als 1 Minute dauerte und der Statuscode der Anfrage „504 Gateway Time-out“ lautete.

Verstehen Sie alle Timeout-bezogenen Konfigurationen von nginx wie folgt:

Keepalive_Timeout

HTTP verfügt über einen KeepAlive-Modus, der dem Webserver mitteilt, die TCP-Verbindung nach der Verarbeitung einer Anfrage offen zu halten. Wenn andere Anfragen vom Client empfangen werden, verwendet der Server diese nicht geschlossene Verbindung, ohne eine weitere Verbindung herzustellen.

http keep-alive, jede Anfrage einer Webseite ist HTTP (Bilder, CSS usw.), und das Öffnen einer HTTP-Anfrage erfordert zuerst das Herstellen einer TCP-Verbindung. Wenn eine Seite für jede Anfrage eine TCP-Verbindung öffnen und schließen muss, ist das eine Verschwendung von Ressourcen. keepalive_timeout ist die Zeit, die die TCP-Verbindung bestehen bleibt, wenn eine HTTP-Anfrage abgeschlossen ist. Wenn zu diesem Zeitpunkt eine weitere HTTP-Anfrage eingeht, wird die TCP-Verbindung wiederverwendet. Wenn keine neue Anfrage eingeht, wird die TCP-Verbindung geschlossen.

Benutzer nginx;
Arbeiterprozesse 1;
 
Fehlerprotokoll /var/log/nginx/error.log warnen;
pid /var/run/nginx.pid;
 
 
Ereignisse {
  Arbeiterverbindungen 1024;
}
 
 
http {
  /etc/nginx/mime.types einschließen;
  Standardtyp Anwendung/Oktett-Stream;
 
  log_format main '$remote_addr - $remote_user [$time_local] "$request" '
           '$status $body_bytes_sent "$http_referer" '
           '"$http_user_agent" "$http_x_forwarded_for"';
 
  Zugriffsprotokoll /var/log/nginx/access.log Haupt;
 
  sendfile an;
  tcp_nopush ein;
  tcp_nodelay ein;
 
 
  KeepAlive-Timeout 65;
  Maximale Körpergröße des Clients: 8192 m.
 
  #gzip ein;
 
  #include /etc/nginx/conf.d/*.conf;
 
 
 
  Server {
 hören Sie 80 so_keepalive=30m::;
 hören Sie 443 Standard-SSL;
 
 SSL-Zertifikat /etc/nginx/ssl/server.crt;
 SSL-Zertifikatsschlüssel /etc/nginx/ssl/portalkey.key;
 #SSL-Passwortdatei /etc/nginx/ssl/ssl.pass;
 
 
    SSL-Sitzungszeitüberschreitung 5 Min.
    SSL-Protokolle SSLv2 SSLv3 TLSv1;
    ssl_ciphers HOCH:!aNULL:!MD5;
    ssl_prefer_server_ciphers ein;
 
 Standort / {
 Proxy_Request_Buffering aus;
 Proxy-Passwort http://127.0.0.1:8011/;
 Proxy_Verbindungs-Timeout 180;
    Proxy_Sendezeitüberschreitung 180;
    Proxy_Lese_Timeout 180;
    Sendezeitüberschreitung 180;
 }
 Standort /test1_url/ {
 Proxy-Passwort http://127.0.0.1:8008/;
 Proxy_Verbindungs-Timeout 180;
    Proxy_Sendezeitüberschreitung 180;
    Proxy_Lese_Timeout 180;
    Sendezeitüberschreitung 180;
 }
 Standort /test2_url/ {
 Proxy-Passwort http://127.0.0.1:3000/;
 Proxy_Verbindungs-Timeout 180;
    Proxy_Sendezeitüberschreitung 180;
    Proxy_Lese_Timeout 180;
    Sendezeitüberschreitung 180;
 }
  }
}

# Konfigurationsabschnitt: http, Standard 75 s

KeepAlive-Timeout 60;

  • send_timeout: Timeout für das Senden von Daten an den Client, standardmäßig 60 Sekunden. Wenn der Client innerhalb von 60 aufeinanderfolgenden Sekunden kein Byte empfängt, wird die Verbindung geschlossen.
  • proxy_connect_timeout: Das Verbindungstimeout zwischen nginx und dem Upstream-Server
  • proxy_read_timeout: nginx tritt beim Empfangen von Daten vom Upstream-Server eine Zeitüberschreitung auf, standardmäßig 60 Sekunden. Wenn innerhalb von 60 aufeinanderfolgenden Sekunden kein Byte empfangen wird, wird die Verbindung geschlossen.
  • proxy_send_timeout: nginx sendet Daten zum Upstream-Server-Timeout, standardmäßig 60 Sekunden. Wenn innerhalb von 60 aufeinanderfolgenden Sekunden kein Byte gesendet wird, wird die Verbindung geschlossen.

so_timeout:

Wenn ein Benutzer eine TCP-Verbindung mit einem Server öffnet --> es gibt für längere Zeit keinen Verkehr auf dieser Verbindung (so_keepalive-Timeout) --> der Server sendet ein Testpaket, um zu sehen, ob der Benutzer noch aktiv ist --> wenn keine Antwort auf das Testpaket erfolgt, wird die TCP-Verbindung geschlossen

so_keepalive=an|aus|[keepidle]:[keepintvl]:[keepcnt]
so_keepalive=30m::10
  setzt das Leerlauf-Timeout (TCP_KEEPIDLE) auf 30 Minuten, belässt das Prüfintervall (TCP_KEEPINTVL) auf seinem Systemstandard und setzt die Prüfanzahl (TCP_KEEPCNT) auf 10 Prüfungen.

Es kann nur einer der drei oben genannten Parameter verwendet werden und sie können nicht gleichzeitig verwendet werden, z. B. so_keepalive = on, so_keepalive = off oder so_keepalive = 30s:: (was bedeutet, dass 30 Sekunden lang ohne Datenpakete gewartet wird, bevor ein Erkennungspaket gesendet wird).

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der Nginx-Timeout-Konfiguration
  • Lösung für das Nginx-Timeout beim Hochladen großer Dateien
  • Detaillierte Einführung in die Nginx-Timeout-Einstellungen
  • Detaillierte Erklärung zur Konfiguration des Timeouts im Nginx-Server
  • Detaillierte Erläuterung der Konfigurationsschritte für das Nginx-Timeout „keeplive_timeout“

<<:  Die 13 am häufigsten in Interviews gestellten Fragen zu Vue-Modifikatoren

>>:  So ändern Sie das ROOT-Passwort in MySql8.0 und höheren Versionen richtig

Artikel empfehlen

dh Filtersammlung

Der IE hat uns in der frühen Entwicklungsphase Ko...

So implementieren Sie eine einfache Datenüberwachung mit JS

Inhaltsverzeichnis Überblick erster Schritt Schri...

Detaillierte Erklärung des Unterschieds zwischen Flex und Inline-Flex in CSS

inline-flex ist dasselbe wie inline-block. Es ist...

Implementierungscode für den MySQL-Protokolltrigger

SQL-Anweisung DROP-TRIGGER WENN EXISTIERT sys_men...

Lösung für das Textüberlaufproblem auf CSS-Flex-Basis

Die unbedeutende flex-basis hat bei der kleinen F...

Lassen Sie uns ausführlich über die LIMIT-Anweisung in MySQL sprechen

Inhaltsverzeichnis Frage Serverebene und Speicher...

Tutorial zu HTML-Formular-Tags (4):

Nehmen Sie nun an, dass Sie dem Formular ein Elem...

Uniapps Erfahrung in der Entwicklung kleiner Programme

1. Erstellen Sie ein neues UI-Projekt Zunächst ei...

In einem Artikel erfahren Sie, wie Sie ein Vue-Plugin schreiben

Inhaltsverzeichnis Was ist ein Plugin Plugins sch...

Detaillierte Erklärung der React-Ereignisbindung

1. Was ist In react Anwendungen werden Ereignisna...

Schritte zum Einrichten einer HTTPS-Website basierend auf Nginx

Inhaltsverzeichnis Vorwort: Verschlüsselungsalgor...

Implementierungscode für die Dateimontage von DockerToolBox

Wenn Sie Docker verwenden, stellen Sie möglicherw...

Beispielcode zum Ändern der Farbe eines PNG-Bildes durch einen CSS3-Filter

Diese Methode verwendet den filter in CSS3 drop-s...