Vraag Nginx config herlaad zonder downtime


Ik gebruik nginx als een reverse proxy. Wanneer ik de configuratie voor gebruik via

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

Ik ondervind een korte downtime. Hoe kan ik dat vermijden?


93
2018-04-11 17:13


oorsprong


Zijn dit bedoeld om opdrachtregelopdrachten te zijn? Ik heb nog nooit iemand een volledige sudo-opdracht in citaten als deze zien inpakken, het is misschien niet nodig. - brianmearns
Gewoon een algemene opmerking: ik denk dat de standaard / aanbevolen praktijk is om een ​​zachte / symbolische link te maken voor uw siteconfiguratie onder sites-enabled, niet kopiëren. Niet gerelateerd aan uw specifieke probleem, maar misschien wilt u daarnaar kijken. - brianmearns
U zou geen downtime moeten ondergaan. kill HUP is de manier om een ​​sierlijke herlaadbeurt in nginx te doen. - Jonathan Vanasco


antwoorden:


Rennen service nginx reload of /etc/init.d/nginx reload

Het zal een hot reload van de configuratie uitvoeren zonder downtime. Als je openstaande aanvragen hebt, zijn er aanhoudende nginx-processen die deze verbindingen verwerken voordat deze sterft, dus het is een uiterst sierlijke manier om configs opnieuw te laden.

Soms wilt u misschien voorafgaan met sudo 


153
2018-04-11 17:24



Beide moeten precies doen wat de vraag stelt: stuur SIGHUP naar het nginx-hoofdproces. Er zou geen verschil moeten zijn. nginx.org/en/docs/control.html - Gnarfoz
Wanneer ik het commando over CentOS uitbreng, blijft het zeggen: "Gebruik /etc/init.d/nginx (start..stop ... restart..reload)" .. en dat is precies hoe ik het heb gebruikt. In het bestand /init.d/nginx vond ik kill -HUP cat $PIDFILE || echo -n "kan niet opnieuw laden" - mashup
weet jij wat het verschil is tussen service nginx reloaden nginx -s reload? Als ik de eerstgenoemde uitvoer, krijg ik deze uitvoer: Reloading nginx configuration: nginx., maar mijn wijzigingen zijn niet bijgewerkt. Als ik het laatste uitvoer, krijg ik geen uitvoer, maar mijn wijzigingen worden weerspiegeld. - Ryan Quinn
Ik heb dit net geprobeerd na het toevoegen van een log_not_found richtlijn, maar vond dat ik een herstart moest doen om het te laten werken. Ik vermoed dat herladen niet werkt voor alle richtlijnen? - mydoghasworms


Rennen /usr/sbin/nginx -s reload

Zien http://wiki.nginx.org/CommandLine voor meer opdrachtregelopties.


55
2017-07-27 13:46



Eindelijk een commando dat werkt in Debian Jessie. - danger89
Dit is een betere manier. Omdat je server dat niet doet naar beneden als uw configuraties fouten bevatten (toont alleen fouten in dit geval). - Mir-Ismaili


Nee, u bent niet correct, het is niet de bedoeling dat u enige downtime ondervindt met de procedure die u beschrijft. (Nginx kan niet alleen herladen on-the-fly configureren zonder downtime, maar zelfs de upgrade van het uitvoerbare bestand tijdens de vlucht, nog steeds zonder downtime.)

Vanaf http://nginx.org/docs/control.html#reconfiguration, het verzenden van de HUP signal to nginx zorgt ervoor dat het een sierlijke herstart uitvoert, en als de configuratiebestanden niet kloppen, wordt de hele procedure verlaten en blijft de nginx over als voor het verzenden van de HUP signaal. Op geen enkel moment zou downtime mogelijk zijn.

Om nginx het configuratiebestand opnieuw te laten lezen, moet een HUP-signaal naar het hoofdproces worden verzonden. Het hoofdproces controleert eerst de geldigheid van de syntaxis en probeert vervolgens een nieuwe configuratie toe te passen, dat wil zeggen om logbestanden en nieuwe luistercontactdozen te openen. Als dit mislukt, worden wijzigingen teruggedraaid en blijft het werken met de oude configuratie.


8
2018-06-22 16:58





Doorgaans hoeft het herladen van het configuratiebestand van een service de lopende service niet te beïnvloeden. Dit hangt echter af van hoe het SIGHUP signaal wordt verwerkt.

Als een specifieke service downtime ondervindt tijdens het opnieuw laden, kan dit worden omzeild door dezelfde service op meerdere servers uit te voeren, bij voorkeur met behulp van een taakverdeler. In dit geval kunt u één server tegelijkertijd verwijderen en opnieuw laden / opnieuw opstarten. Daarna kan het opnieuw worden toegevoegd nadat het bevestigt dat het OK is.


2
2018-04-11 17:24



Hoewel dit niet direct de vraag beantwoordt, is dit zeker een best-practice scenario dat het OP slim zou zijn om te volgen om downtime in het algemeen te voorkomen. - Andrew M.
Details over hoe nginx verschillende signalen verwerkt: nginx.org/en/docs/control.html - Gnarfoz