Yo uso nginx como un proxy inverso.
Cada vez que actualizo la configuración para ello usando
sudo "cp -r #{nginx_config_path}* /etc/nginx/sites-enabled/"
sudo "kill -s HUP `cat /var/run/nginx.pid`"
Me enfrento a un breve tiempo de inactividad. ¿Cómo puedo evitar eso?
correr service nginx reload
o /etc/init.d/nginx reload
Hará una recarga en caliente de la configuración sin tiempo de inactividad. Si tiene solicitudes pendientes, entonces habrá procesos nginx persistentes que manejarán esas conexiones antes de que mueran, por lo que es una forma extremadamente elegante de volver a cargar las configuraciones.
A veces es posible que desee anteponer con sudo
correr /usr/sbin/nginx -s reload
Ver http://wiki.nginx.org/CommandLine para más opciones de línea de comandos.
No, usted es incorrecto, se supone que no debe enfrentar ningún tiempo de inactividad con el procedimiento que describe. (Nginx no solo puede hacer recargas de configuración sobre la marcha sin ningún tiempo de inactividad, sino que incluso la actualización del ejecutable sobre la marcha, aún sin ningún tiempo de inactividad).
Según http://nginx.org/docs/control.html#reconfiguration, enviando el HUP
la señal a nginx se asegura de que se realice un reinicio correcto y, si los archivos de configuración son incorrectos, se abandona todo el procedimiento, y queda con el nginx como antes de enviar el HUP
señal. En ningún momento debe ser posible ningún tiempo de inactividad.
Para que nginx vuelva a leer el archivo de configuración, se debe enviar una señal HUP al proceso maestro. El proceso maestro primero verifica la validez de la sintaxis, luego intenta aplicar una nueva configuración, es decir, abrir archivos de registro y nuevos sockets de escucha. Si esto falla, revierte los cambios y continúa trabajando con la configuración anterior.
Normalmente, la carga del archivo de configuración de un servicio no debería afectar al servicio en ejecución. Sin embargo, esto depende de cómo el SIGHUP
se procesa la señal.
Si un servicio específico experimenta un tiempo de inactividad durante la recarga, esto puede evitarse ejecutando el mismo servicio en varios servidores, preferiblemente utilizando un equilibrador de carga. En este caso, puede sacar un servidor a la vez y volver a cargarlo / reiniciarlo. Luego, se puede volver a agregar después de confirmar que está bien.