Beispielanalyse des Nginx-Signalsatzes
Szenarioreproduktion
Im Folgenden werde ich einen nativen Nginx verwenden, um diesen Prozess auf meiner virtuellen Maschine mit installiertem Fedora26 zu reproduzieren. Die von mir verwendete Nginx-Version ist die neueste Version 1.13.4.
Starten Sie zunächst nginx Master und Worker laufen bereits.
Dann senden wir ein sigusr2-Signal an den Master. Wenn der Nginx-Kern dieses Signal empfängt, wird ein Hot-Update ausgelöst.
Sie können sehen, dass der neue Master und die vom Master gegabelten Worker bereits ausgeführt werden. Nach Erhalt dieses Signals sendet der alte Master ein Sigquit seine Arbeiter, sodass der Arbeitsprozess des alten Meisters beendet wird:
Zu diesem Zeitpunkt laufen nur noch der alte Meister, der neue Meister und die Arbeiter des neuen Meisters, was der Situation beim Online-Betrieb ähnelt damals.
Dann verwenden wir den Stoppbefehl:
Wir werden feststellen, dass der neue Master und seine Worker beendet wurden, während der alte Master noch läuft und Worker hervorgebracht hat. Das war damals online die Situation.
Tatsächlich hängt dieses Phänomen mit dem Design von Nginx selbst zusammen: Wenn der alte Master bereit ist, einen neuen Master zu forken, benennt er die Datei nginx.pid in nginx.pid.oldbin um und forkt dann den neuen Master. Der Master erstellt eine neue nginx.pid. Diese Datei zeichnet die PID des neuen Masters auf. Nginx ist der Ansicht, dass die Mission des alten Masters nach Abschluss des Hot-Updates fast beendet ist und jederzeit beendet werden kann, sodass alle nachfolgenden Vorgänge vom neuen Master übernommen werden sollten. Natürlich ist es ungültig, ein weiteres Hot-Update zu versuchen, indem man sigusr2 an den neuen Master sendet, ohne dass der alte Master beendet wird. Der neue Master ignoriert dieses Signal einfach und setzt seine eigene Arbeit fort.
Dieser Code stammt aus dem offiziellen Nginx-Dokument /etc/init.d/nginx.
Nginx-Signalsatz
Sigup neu laden
Sigusr1 erneut öffnenSigterm stoppen
Quit SigquitHot Update Sigusr2 & Sigwinch & Sigquit
Stop vs Quit
Stop sendet das Sigterm-Signal und zeigt an, dass eine Kraft erforderlich ist Ausgang , und quit wird gesendet. Sigquit bedeutet, ordnungsgemäß zu beenden. Der spezifische Unterschied besteht darin, dass der Arbeitsprozess nach dem Empfang der Sigquit-Nachricht (beachten Sie, dass das Signal nicht direkt gesendet wird, sodass stattdessen die Nachricht verwendet wird) den Listening-Socket schließt und die derzeit inaktive Verbindung schließt (die Verbindung, die vorbelegt werden kann). ) und verarbeiten Sie es dann im Voraus. Alle Timer-Ereignisse werden am Ende beendet. Sofern keine besonderen Umstände vorliegen, sollte quit anstelle von stop verwendet werden.
reload
Nachdem der Master-Prozess sigusr1 empfangen hat, öffnet er alle geöffneten Dateien (z. B. Protokolle) erneut und sendet dann sigusr1-Informationen an jeden Arbeitsprozess. Nachdem der Arbeitsprozess das Signal empfangen hat, führt er den gleichen Vorgang aus. Reopen kann zum Beispiel zum Schneiden von Protokollen verwendet werden:
Hier ist Sleep 1 erforderlich, da zwischen dem Master-Prozess, der die sigusr1-Nachricht an den Worker-Prozess sendet, und dem tatsächlichen erneuten Öffnen von access.log liegt , es gibt Für einen bestimmten Zeitraum schreibt der Arbeitsprozess noch Protokolle in die Datei access.log.0. Durch das Schlafen von 1 Sekunden wird die Integrität der Protokollinformationen von access.log.0 sichergestellt (wenn die Komprimierung direkt ohne Ruhezustand durchgeführt wird, ist es wahrscheinlich, dass ein Protokollverlust auftritt).
Hot-Update
Manchmal muss Nginx diese Funktion während des Entwurfs durchführen, sie kann jedoch nicht über die von Nginx bereitgestellte Befehlszeile durchgeführt werden.
Durch das erneute Auftreten des oben genannten Problems sollten Sie verstanden haben, wie man ein Hot-Update durchführt. Zuerst müssen wir sigusr2 an den aktuellen Master-Prozess senden. Dann wird der Master nginx.pid in nginx.pid.oldbin umbenennen und dann einen neuen forken Erstens verwendet der neue Prozess den Execve-Systemaufruf, um das aktuelle Prozessabbild durch die neue Nginx-Elf-Datei zu ersetzen und zum neuen Master-Prozess zu werden. Nachdem der neue Master-Prozess gestartet ist, führt er das Parsen der Konfigurationsdatei und andere Vorgänge durch und leitet dann den neuen Worker-Prozess aus, um mit der Arbeit zu beginnen.
Dann senden wir das Sigwinch-Signal an den alten Master, und dann sendet der alte Master-Prozess die Sigquit-Nachricht an seinen Worker-Prozess, wodurch der Worker-Prozess beendet wird. Das Senden von Sigwinch und Sigquit an den Master-Prozess führt dazu, dass der Arbeitsprozess beendet wird, ersteres führt jedoch nicht dazu, dass auch der Master-Prozess beendet wird.
Wenn wir schließlich das Gefühl haben, dass der Altmeisterprozess seine Mission erfüllt hat, können wir ihm das Sigquit-Signal senden und ihn beenden lassen.
Wie der Worker-Prozess die Signalnachricht vom Master verarbeitet
Tatsächlich kommuniziert der Master-Prozess mit dem Worker-Prozess, nicht über die Kill-Funktion, sondern über den über die Pipe implementierten Nginx-Kanal. Der Master-Prozess schreibt Informationen in einen Am Ende der Pipe (z. B. Signalinformationen) empfängt der Arbeitsprozess Informationen vom anderen Ende. Das Nginx-Kanalereignis wird dem Ereignisplaner (z. B. Epoll, KQueue) hinzugefügt, wenn der Arbeitsprozess gerade aufsteht Die vom Master gesendeten Daten können vom Ereignisplaner benachrichtigt werden.
nginx ist aus gutem Grund so konzipiert, dass nginx eine extrem hohe Leistung anstrebt und der Signalhandler die Ausführung des Worker-Prozesses unterbricht, wodurch alle Ereignisse für ein Zeitfenster ausgesetzt werden ist ein gewisser Leistungsverlust.
Viele Leute denken vielleicht, dass der Worker-Prozess sofort mit entsprechenden Vorgängen reagiert, wenn er Nginx aufruft Kanal Nach dem Event-Handler verarbeitet Nginx nur einige Flags. Diese Aktionen werden tatsächlich ausgeführt, nachdem eine Runde der Ereignisplanung abgeschlossen ist. Daher gibt es dazwischen ein Zeitfenster, insbesondere wenn das Geschäft komplex und der Verkehr groß ist. Aus diesem Grund erfordert der von Nginx bereitgestellte Protokollschnittplan offiziell Schlafzeiten.
Natürlich können wir den Master-Prozess auch umgehen und Signale direkt an den Worker-Prozess senden. Die Signale, die der Worker verarbeiten kann, sind
Signaleffekt
sigint erzwingen Exit
sigterm erzwingen Exit
sigquit Graceful Exit
sigusr1 öffnen Sie die Datei erneut
Das obige ist der detaillierte Inhalt vonBeispielanalyse des Nginx-Signalsatzes. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



So bestätigen Sie, ob Nginx gestartet wird: 1. Verwenden Sie die Befehlszeile: SystemCTL Status Nginx (Linux/Unix), Netstat -ano | FindStr 80 (Windows); 2. Überprüfen Sie, ob Port 80 geöffnet ist; 3. Überprüfen Sie die Nginx -Startmeldung im Systemprotokoll. 4. Verwenden Sie Tools von Drittanbietern wie Nagios, Zabbix und Icinga.

Schritte zum Starten von Nginx unter Linux: Überprüfen Sie, ob Nginx installiert ist. Verwenden Sie SystemCTL Start Nginx, um den Nginx -Dienst zu starten. Verwenden Sie SystemCTL aktivieren NGINX, um das automatische Start von NGINX beim Systemstart zu aktivieren. Verwenden Sie den SystemCTL -Status NGINX, um zu überprüfen, ob das Startup erfolgreich ist. Besuchen Sie http: // localhost in einem Webbrowser, um die Standard -Begrüßungsseite anzuzeigen.

Wie konfiguriere ich Nginx in Windows? Installieren Sie NGINX und erstellen Sie eine virtuelle Hostkonfiguration. Ändern Sie die Hauptkonfigurationsdatei und geben Sie die Konfiguration der virtuellen Host ein. Starten oder laden Nginx neu. Testen Sie die Konfiguration und sehen Sie sich die Website an. Aktivieren Sie selektiv SSL und konfigurieren Sie SSL -Zertifikate. Stellen Sie die Firewall selektiv fest, damit Port 80 und 443 Verkehr.

Es gibt zwei Möglichkeiten, das Problem mit dem Cross-Domain-Problem mit dem NGINX-Problem zu lösen: Änderungen der Cross-Domänen-Antwort-Header: Fügen Sie Anweisungen hinzu, um Cross-Domain-Anforderungen zu ermöglichen, zulässigen Methoden und Header anzugeben und die Cache-Zeit festzulegen. Verwenden Sie das CORS-Modul: Aktivieren Sie Module und konfigurieren Sie die CORS-Regeln, um Cross-Domain-Anforderungen, Methoden, Header und Cache-Zeit zu ermöglichen.

Verwenden Sie unter Linux den folgenden Befehl, um zu überprüfen, ob Nginx gestartet wird: SystemCTL -Status Nginx Richter basierend auf der Befehlsausgabe: Wenn "aktiv: aktiv (lief) angezeigt wird, wird Nginx gestartet. Wenn "Active: Inactive (Dead)" angezeigt wird, wird Nginx gestoppt.

Die Methoden zum Anzeigen des laufenden Status von Nginx sind: Verwenden Sie den Befehl ps, um den Prozessstatus anzuzeigen; Zeigen Sie die nginx -Konfigurationsdatei /etc/nginx/nginx.conf an; Verwenden Sie das Nginx -Statusmodul, um den Statusendpunkt zu aktivieren. Verwenden Sie Überwachungstools wie Prometheus, Zabbix oder Nagios.

Das Starten eines Nginx-Servers erfordert unterschiedliche Schritte gemäß verschiedenen Betriebssystemen: Linux/UNIX-System: Installieren Sie das NGINX-Paket (z. B. mit APT-Get oder Yum). Verwenden Sie SystemCTL, um einen Nginx -Dienst zu starten (z. B. sudo systemctl start nginx). Windows -System: Laden Sie Windows -Binärdateien herunter und installieren Sie sie. Starten Sie Nginx mit der ausführbaren Datei nginx.exe (z. B. nginx.exe -c conf \ nginx.conf). Unabhängig davon, welches Betriebssystem Sie verwenden, können Sie auf die Server -IP zugreifen

Antwort auf die Frage: 304 Nicht geänderter Fehler gibt an, dass der Browser die neueste Ressourcenversion der Client -Anfrage zwischengespeichert hat. Lösung: 1. Löschen Sie den Browser -Cache; 2. Deaktivieren Sie den Browser -Cache; 3. Konfigurieren Sie Nginx, um den Client -Cache zu ermöglichen. 4. Überprüfen Sie die Dateiberechtigungen; 5. Datei Hash prüfen; 6. Deaktivieren Sie CDN oder Reverse Proxy -Cache; 7. Starten Sie Nginx neu.
