Habilitar en nginx la página de Status

El servidor web Nginx permite habilitar de un modo similar a Apache una página web mediante la cual monitorizar el estado y algunos parámetros del servidor. Por una parte está el módulo «ngx_http_stub_status_module» que ofrece una página básica en la que se muestra el estado del server y por otro, el módulo de la versión comercial «ngx_http_status_module» que ofrece información mucho más detallada y personalizable.

Del módulo comercial no voy a hablar, podéis ver la información del mismo en la documentación de NGINX y visitar esta demo del resultado final.

Instalar el módulo de status http_stub_status_module

Depende de si habéis compilado manualmente NGINX o el paquete precompilado que estéis usando puede que el módulo esté habilitado o no. Para verificarlo se ejecuta el siguiente comando que muestra la línea de compilación y todos los módulos:

# nginx -V | grep -o with-http_stub_status_module
with-http_stub_status_module

La salida completa:

# nginx -V 
nginx version: nginx/1.6.2
built by gcc 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC) 
TLS SNI support enabled
configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx 
--conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body
--http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi
--http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi
--pid-path=/var/run/nginx.pid --lock-path=/var/lock/subsys/nginx --user=nginx --group=nginx
--with-file-aio --with-ipv6 --with-http_ssl_module --with-http_spdy_module --with-http_realip_module
--with-http_addition_module --with-http_xslt_module --with-http_image_filter_module
--with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module
--with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module
--with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module
--with-http_stub_status_module --with-http_perl_module --with-mail --with-mail_ssl_module
--with-pcre --with-google_perftools_module --with-debug
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector
--param=ssp-buffer-size=4 -m64 -mtune=generic' --with-ld-opt=' -Wl,-E'

En el ejemplo anterior vemos que está compilado así que podemos utilizarlo. En caso contrario hay que recompilar NGINX añadiendo el módulo, disponible en el código fuente, ejemplo:

# ./configure \
  --prefix=/opt/nginx \
 --sbin-path=/opt/nginx/sbin \
 --conf-path=/opt/nginx/nginx.conf \
 --pid-path=/opt/nginx/run/nginx.pid \
 --with-http_ssl_module \
 --with-http_gzip_static_module \
 --with-http_stub_status_module 

Podéis visitar el artículo de instalación de NGINX si tenéis alguna duda, ahí os enseño como compilarlo manualmente.

Configurar el módulo de status http_stub_status_module

Una vez instalado, la configuración es sencilla. Simplemente añadimos un bloque «Location» dentro del bloque «server» correspondiente especificando la URL que mostrará la página de status (se activa con «stub_status on;») y opcionalmente las IPs o rangos que permitimos acceder:

location /nginx-status {
 stub_status on;
 allow 10.0.0.100;
 allow 192.168.1.0/24;
 allow 127.0.0.1;
 deny all;
 }

El resultado al acceder a la URL es algo similar a:

# curl http://localhost/nginx-status
Active connections: 1 
server accepts handled requests
 4 4 6 
Reading: 0 Writing: 1 Waiting: 0 
  • Active connections: número de conexiones activas (incluye las Waiting, que en caso de tener keepalive activo suelen ser muchas)
  • accepts: conexiones de cliente aceptadas
  • handled: número total de conexiones que se están gestionando. El valor debería ser igual que «accepts» a no ser de que exista algún problema)
  • requests: número total de peticiones de clientes
  • Reading: número de conexiones de las que nginx está leyendo la cabecera request.
  • Writing: número de conexiones de las que nginx está enviando respuesta al cliente
  • Waiting; conexiones en espera de aceptar requests de clientes.