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

WeChat-Miniprogramm zur Implementierung elektronischer Signaturen

In diesem Artikel finden Sie den spezifischen Cod...

SQL GROUP BY ausführliche Erklärung und einfaches Beispiel

Die GROUP BY-Anweisung wird in Verbindung mit der...

Gängige Methoden und Probleme der Docker-Bereinigung

Wenn Sie Docker für die Entwicklung im großen Maß...

Detaillierte Erläuterung der MySQL-Cursor-Konzepte und -Verwendung

Dieser Artikel erläutert anhand von Beispielen da...

So konfigurieren Sie Benutzerrollenberechtigungen in Jenkins

Die Jenkins-Konfiguration von Benutzerrollenberec...

Verwenden von jQuery zum Implementieren des Karusselleffekts

Was ich Ihnen heute zeige, ist die Verwendung von...

Beitrag zur Übermittlung von HTML-Daten_PowerNode Java Academy

Zu den vom HTTP/1.1-Protokoll angegebenen HTTP-An...

Lernen Sie Node.js von Grund auf

Inhaltsverzeichnis URL-Modul 1.Parse-Methode 2. F...

So deinstallieren Sie MySQL 5.7 unter CentOS7

Überprüfen Sie, was in MySQL installiert ist grep...

jQuery verwendet das Canvas-Tag, um den Bestätigungscode zu zeichnen

Das <canvas>-Element ist für clientseitige ...

Eine kurze Analyse zum besten Umgang mit vergessenen MySQL 8-Passwörtern

Vorwort Leser, die mit MySQL vertraut sind, werde...

Was tun, wenn Sie Ihr MySQL-Passwort vergessen?

Lösung zum Vergessen des MySQL-Passworts: [root@l...