05 diciembre 2007

Opciones de línea de comandos en nginx


En principio con esto finaliza la pequeña guía que tenía en mente, pero lógicamente tendré que ir ampliando información, o bien creando nuevas páginas con las ampliaciones.

Básicamente esta entrada es una traducción de la página de nginx, porque tampoco hay demasiado que añadir.

Nginx tiene sólo unos pocos parámetros en línea de comandos porque al contrario que otro software la configuración se realiza totalmente en el fichero de configuración.

- Opciones:

-c Especifica qué fichero de configuración debería utilizar nginx en lugar del fichero por defecto.

-t No se ejecuta, simplemente chequea el fichero de configuración. nginx chequea el fichero para confirmar que tiene una sintaxis correcta y trata de abrir los ficheros referidos en la configuración.

-v Imprime la versión.

-V Imprime la versión de nginx, la versión del compilador, y los parámetros de configuración.
- Ejemplo
/usr/bin/nginx -t -c ~/mynginx.conf
- Controlando nginx con señales

Se puede controlar el proceso master con las señales. Por defecto nginx escribe el pid el proceso master en /usr/local/nginx/logs/nginx.pid. Se puede cambiar este comportamiento pasando parámetros al ./configure o utilizando la directiva pid .

El proceso master soporta las siguientes señales:

TERM/INT; parada rápida
QUIT; parada graceful (parando los procesos cuando dejen de atender peticiones).
HUP; recarga de la configuración, se paran los viejos procesos worker cuando terminen de atender peticiones y se abren otros procesos worker.
USR1; reapertura de los ficheros de log.
USR2; actualización del ejecutable al vuelo.
WINCH; parada de los procesos worker cuando dejen de atender peticiones

No hay necesidad de manejar los procesos worker aunque también soportan algunas señales como son TERM/INT, QUIT, USR1

- Cargar nueva configuración:
Es tan fácil como enviarle una señal HUP al proceso master de nginx
kill -HUP `cat /var/run/nginx.pid`
- Actualizando el binario de nginx al vuelo:

Si necesitas reemplazar el binario de nginx con uno nuevo (cuando se actualiza a una nueva versión o añadimos/quitamos módulos del servidor), puedes hacerlo sin perder ninguna petición al servidor.

Primero, reemplaza el viejo binario con el nuevo, entonces envía la señal USR2 al proceso master. Lo que hace es renombrar su fichero .pid a .oldbin, entonces ejecuta el nuevo binario, que creará un nuevo proceso master y sus nuevos procesos worker

En este punto estarán corriendo dos instancias de nginx manejando las peticiones juntas. Para eliminar gradualmente la vieja instancia, tendrás que enviar una señal WINCH al último proceso master, y sus procesos worker comenzarán a pararse cuando dejen de responder peticiones.

En este punto todavía se puede volver hacia atrás al viejo servidor siguiendo los siguientes pasos, porque todavía no ha cerrado sus sockets en estado listen:

  • Enviar una señal HUP al viejo proceso master - arrancará procesos worker sin recargar el fichero de configuración
  • Enviar una señal QUIT al nuevo proceso master, que cerrará sus procesos worker
  • Enviar una señal TERM al nuevo proceso master que hará que se cierre rápidamente
  • Si por alguna razón los procesos worker del nuevo servidor no se cierran, se puede enviar una señal KILL a estos procesos
Después de que el proceso del nuevo master se cierre, el viejo master borra el sufijo .oldbin de su fichero pid, y todo es exactamente igual al momento anterior al intento de actualización. Si el intento de actualización tiene éxito y quieres mantener el nuevo servidor, envía una señal QUIT al viejo proceso master para dejar sólo corriendo el nuevo servidor.

- Referencias:
Opciones de línea de comandos (en inglés)

Primera parte, Segunda parte, Tercera parte, Cuarta parte

No hay comentarios: