it-swarm.com.de

Nginx-Konfiguration ohne Ausfallzeit neu laden

Ich benutze Nginx als Reverse Proxy. Immer wenn ich die Konfiguration dafür mit aktualisiere

Sudo "cp -r #{nginx_config_path}* /etc/nginx/sites-enabled/"
Sudo "kill -s HUP `cat /var/run/nginx.pid`"

Ich stehe vor einer kurzen Ausfallzeit. Wie kann ich das vermeiden?

131
Saurav Shah

Lauf service nginx reload oder /etc/init.d/nginx reload

Die Konfiguration wird ohne Ausfallzeit im laufenden Betrieb neu geladen. Wenn Sie ausstehende Anforderungen haben, gibt es noch verweilende Nginx-Prozesse, die diese Verbindungen verarbeiten, bevor sie sterben. Daher ist dies eine äußerst elegante Möglichkeit, Konfigurationen neu zu laden.

Manchmal möchten Sie vielleicht Sudo voranstellen

193
Hengjie

Lauf /usr/sbin/nginx -s reload

Weitere Befehlszeilenoptionen finden Sie unter http://wiki.nginx.org/CommandLine .

88
Shiv Kumar Sah

Nein, Sie sind falsch, Sie sollten mit dem von Ihnen beschriebenen Verfahren keine Ausfallzeiten haben. (Nginx kann nicht nur die Konfiguration im laufenden Betrieb ohne Ausfallzeit neu laden, sondern auch das Upgrade der ausführbaren Datei im laufenden Betrieb, immer noch ohne Ausfallzeit.)

Gemäß http://nginx.org/docs/control.html#reconfiguration stellt das Senden des Signals HUP an nginx sicher, dass ein ordnungsgemäßer Neustart durchgeführt wird, und, falls die Konfiguration erfolgt Dateien sind falsch, die gesamte Prozedur wird abgebrochen und Sie bleiben wie vor dem Senden des Signals HUP beim Nginx. Ausfallzeiten sollten zu keinem Zeitpunkt möglich sein.

Damit nginx die Konfigurationsdatei erneut lesen kann, sollte ein HUP-Signal an den Master-Prozess gesendet werden. Der Master-Prozess überprüft zuerst die Gültigkeit der Syntax und versucht dann, eine neue Konfiguration anzuwenden, dh Protokolldateien und neue Listen-Sockets zu öffnen. Wenn dies fehlschlägt, werden Änderungen rückgängig gemacht und die alte Konfiguration wird weiterhin verwendet.

10
cnst

Der Vollständigkeit halber die systemd Vorgehensweise:

systemctl reload nginx
3
Selcuk

Normalerweise sollte das erneute Laden der Konfigurationsdatei eines Dienstes keinen Einfluss auf den ausgeführten Dienst haben. Dies hängt jedoch davon ab, wie das Signal SIGHUP verarbeitet wird.

Wenn bei einem bestimmten Dienst während des Neuladens eine Ausfallzeit auftritt, kann dies umgangen werden, indem derselbe Dienst auf mehreren Servern ausgeführt wird, vorzugsweise mithilfe eines Lastenausgleichs. In diesem Fall können Sie jeweils einen Server herausnehmen und neu laden/neu starten. Anschließend kann es erneut hinzugefügt werden, nachdem bestätigt wurde, dass es in Ordnung ist.

2
Khaled