web-dev-qa-db-fra.com

Recharger la configuration Nginx sans temps d'arrêt

J'utilise nginx comme proxy inverse. Chaque fois que je mets à jour la config en utilisant

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

Je fais face à un bref temps d'arrêt. Comment puis-je éviter cela?

131
Saurav Shah

Courir service nginx reload ou /etc/init.d/nginx reload

Il effectuera un rechargement à chaud de la configuration sans temps d'arrêt. Si vous avez des demandes en attente, alors il y aura des processus nginx persistants qui gèreront ces connexions avant qu'il ne meure, c'est donc un moyen extrêmement gracieux de recharger les configurations.

Parfois, vous pouvez ajouter un préfixe avec Sudo

193
Hengjie

Courir /usr/sbin/nginx -s reload

Voir http://wiki.nginx.org/CommandLine pour plus d'options de ligne de commande.

88
Shiv Kumar Sah

Non, vous avez tort, vous n'êtes pas censé faire face à un temps d'arrêt avec la procédure que vous décrivez. (Nginx peut non seulement recharger la configuration à la volée sans aucun temps d'arrêt, mais même la mise à niveau de l'exécutable à la volée, toujours sans aucun temps d'arrêt.)

Selon http://nginx.org/docs/control.html#reconfiguration , l'envoi du signal HUP à nginx garantit qu'il effectue un redémarrage gracieux et, si la configuration les fichiers sont incorrects, toute la procédure est abandonnée et vous vous retrouvez avec le nginx comme avant d'envoyer le signal HUP. À aucun moment, aucun temps d'arrêt ne devrait être possible.

Pour que nginx relise le fichier de configuration, un signal HUP doit être envoyé au processus maître. Le processus maître vérifie d'abord la validité de la syntaxe, puis essaie d'appliquer une nouvelle configuration, c'est-à-dire d'ouvrir des fichiers journaux et de nouvelles sockets d'écoute. Si cela échoue, il annule les modifications et continue de fonctionner avec l'ancienne configuration.

10
cnst

Pour être complet, la façon systemd de le faire:

systemctl reload nginx
3
Selcuk

Habituellement, le rechargement du fichier de configuration d'un service ne doit pas affecter le service en cours d'exécution. Cependant, cela dépend de la façon dont le signal SIGHUP est traité.

Si un service spécifique connaît un temps d'arrêt pendant le rechargement, cela peut être contourné en exécutant le même service sur plusieurs serveurs en utilisant de préférence un équilibreur de charge. Dans ce cas, vous pouvez supprimer un serveur à la fois et le recharger/redémarrer. Ensuite, il peut être rajouté après avoir confirmé qu'il est OK.

2
Khaled