Nginx config ricaricare senza tempi di inattività


123

Uso nginx come proxy inverso. Ogni volta che aggiorno la configurazione per esso usando

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

Devo affrontare un breve periodo di inattività. Come posso evitarlo?


1
Devono essere comandi da riga di comando? Non ho mai visto nessuno racchiudere un intero comando sudo tra virgolette del genere, potrebbe non essere necessario.
brianmearns,

4
Solo un commento generale: penso che la pratica standard / consigliata sia quella di creare un collegamento soft / simbolico per la configurazione del tuo sito sotto sites-enabled, non di copiarlo. Non correlato al tuo problema specifico, ma potresti voler esaminare questo.
brianmearns,

1
Non dovresti affrontare un tempo morto. kill HUPè il modo di eseguire un grazioso caricamento in nginx.
Jonathan Vanasco,

Risposte:


180

Esegui service nginx reloado/etc/init.d/nginx reload

Farà un hot ricaricamento della configurazione senza tempi di inattività. Se hai richieste in sospeso, ci saranno processi nginx persistenti che gestiranno quelle connessioni prima che muoia, quindi è un modo estremamente grazioso per ricaricare le configurazioni.

A volte potresti voler anteporre sudo


10
Entrambi dovrebbero fare esattamente ciò che afferma la domanda: inviare SIGHUPal processo master nginx. Non dovrebbe esserci differenza. nginx.org/en/docs/control.html
Gnarfoz

Quando invio il comando su CentOS continua a dire "Uso /etc/init.d/nginx (start..stop ... restart..reload)" .. ed è esattamente come l'ho usato. All'interno del file /init.d/nginx ho trovato kill -HUP cat $PIDFILE|| echo -n "impossibile ricaricare"
mashup

1
sai qual è la differenza tra service nginx reloade nginx -s reload? Se eseguo il primo, ottengo questo output:, Reloading nginx configuration: nginx.ma le mie modifiche non vengono aggiornate. Se eseguo quest'ultimo, non ottengo alcun output, ma le mie modifiche si riflettono.
Ryan Quinn,

Ho appena provato questo dopo aver aggiunto una log_not_founddirettiva, ma ho scoperto che dovevo effettivamente fare un riavvio per farlo funzionare. Immagino che ricaricare non funzioni per tutte le direttive?
mydoghasworms,

81

Correre /usr/sbin/nginx -s reload

Vedi http://wiki.nginx.org/CommandLine per ulteriori opzioni da linea di comando.


Finalmente un comando che funziona in Debian Jessie.
danger89,

1
Questo è un modo migliore Perché il tuo server non si arresta se le tue configurazioni hanno errori (mostra solo errori in questo caso).
Mir-Ismaili,

se nginx pid predefinito non si trova nella posizione predefinita, è necessario '-p'. ovvero: `/ opt / gitlab / embedded / sbin / nginx -s ricaricare -p / var / opt / gitlab / nginx`
qxo

9

No, non sei corretto, non dovresti affrontare alcun tempo morto con la procedura che descrivi. (Nginx può non solo ricaricare la configurazione al volo senza tempi di inattività, ma anche l'aggiornamento dell'eseguibile al volo, sempre senza tempi di inattività.)

Secondo http://nginx.org/docs/control.html#reconfiguration , l'invio del HUPsegnale a nginx si assicura che esegua un riavvio corretto e, se i file di configurazione non sono corretti, l'intera procedura viene abbandonata e tu ' viene lasciato con nginx come prima di inviare il HUPsegnale. In nessun momento dovrebbero essere possibili tempi di fermo.

Affinché nginx rileggi il file di configurazione, è necessario inviare un segnale HUP al processo principale. Il processo principale controlla innanzitutto la validità della sintassi, quindi tenta di applicare una nuova configurazione, ovvero aprire file di registro e nuovi socket di ascolto. In caso contrario, ripristina le modifiche e continua a funzionare con la vecchia configurazione.


2

Di solito, ricaricare il file di configurazione di un servizio non dovrebbe influire sul servizio in esecuzione. Tuttavia, questo dipende da come SIGHUPviene elaborato il segnale.

Se un servizio specifico riscontra un tempo di inattività durante il ricaricamento, questo può essere eluso eseguendo lo stesso servizio su più server, preferibilmente utilizzando un bilanciamento del carico. In questo caso, è possibile estrarre un server alla volta e ricaricarlo / riavviarlo. Quindi, può essere aggiunto nuovamente dopo aver verificato che è OK.


Sebbene ciò non risponda direttamente alla domanda, si tratta sicuramente di uno scenario di buone pratiche che l'OP sarebbe intelligente seguire per evitare i tempi di inattività in generale.
Andrew M.,

1
Dettagli su come nginx gestisce segnali diversi: nginx.org/en/docs/control.html
Gnarfoz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.