Skip to main content

Configuración de NGINX

Configuración de NGINX

Para que el plugin pueda obtener las estadísticas, HAProxyNGINX debe exponer el endpoint /stats;csvstub_status. La habilitación se realiza editando el fichero haproxy.cfgde configuración de NGINX (por defecto en /etc/haproxy/haproxy.cfgnginx/nginx.conf o /etc/nginx/sites-available/default).

El módulo ngx_http_stub_status_module no se incluye en todas las compilaciones de NGINX. Para verificar si está disponible, ejecuta nginx -V 2>&1 | grep stub_status. La mayoría de las distribuciones Linux lo incluyen por defecto.

Configuración mínima (sin autenticación, sin SSL)

Añade ununa frontendlocation dedicadodedicada aal lasestado estadísticas:dentro de tu server:

frontendserver stats{
    bindlisten *:840480;
    statsserver_name enable_;

    stats urilocation /statsnginx_status stats{
        refreshstub_status 10son;
        access_log off;
        allow 192.168.1.50;   # IP del servidor de Pandora FMS
        deny all;
    }
}

Con esta configuración el plugin consumirá la URL:

http://<IP_SERVIDOR>:8404/stats/nginx_status

El plugin normaliza automáticamente la URL añadiendo el sufijo ;csv y el parámetro norefresh cuando faltan, por lo que basta con indicar la URL base de stats.

Configuración con autenticación básica

Para proteger el endpoint con usuario y contraseña, define una userlistauth_basic y aplica http-request authauth_basic_user_file en ella frontendlocation de stats:status:

frontendserver stats{
    bindlisten *:840480;
    statsserver_name enable_;

    stats urilocation /statsnginx_status stats{
        refreshstub_status 10son;
        aclaccess_log auth_okoff;
        http_auth(stats_users)auth_basic http-request"NGINX authStatus";
        realmauth_basic_user_file stats/etc/nginx/.htpasswd;
    if}
!auth_ok

userlist stats_users
    user admin password $6$rounds=5000$<HASH_SHA512>}

Genera el hashfichero de la contraseña.htpasswd con mkpasswdhtpasswd o openssl:

mkpasswdhtpasswd -mc sha-256/etc/nginx/.htpasswd mypasswordadmin
# o bien
openssl passwd -6apr1 mypassword > /etc/nginx/.htpasswd

En el plugin se deberá facilitar ese mismo username y password mediante --user / --password (o los campos username / password del archivo de configuración).

Configuración con SSL/TLS

Para servir las estadísticas sobre HTTPS añadeconfigura el certificado en el ssl crt al bindserver:

frontendserver stats{
    bindlisten *:8404443 sslssl;
    crtserver_name _;

    ssl_certificate     /etc/haproxy/nginx/certs/stats.pemstatus.pem;
    stats enable
    stats urissl_certificate_key /statsetc/nginx/certs/status.key;

    statslocation refresh/nginx_status 10s{
        stub_status on;
        access_log off;
        allow 192.168.1.50;
        deny all;
    }
}

Genera un certificado autofirmado de pruebas con:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout /etc/haproxy/nginx/certs/stats.status.key \
  -out /etc/haproxy/nginx/certs/stats.status.crt \
  -subj "/CN=localhost"
cat /etc/haproxy/nginx/certs/stats.status.crt /etc/haproxy/nginx/certs/stats.status.key > /etc/haproxy/nginx/certs/stats.status.pem

En el plugin se indicará la URL con esquema https:// y el parámetro --ssl (o verify_ssl) según se quiera validar el certificado:

  • verify_ssl = true → para certificados válidos en producción.
  • verify_ssl = false → para certificados autofirmados o entornos de prueba.

Configuración completa (SSL + autenticación)

globalserver maxconn{
    4096listen defaults443 modessl;
    httpserver_name timeout_;

    connectssl_certificate     5s/etc/nginx/certs/status.pem;
    timeoutssl_certificate_key client/etc/nginx/certs/status.key;

    30slocation timeout/nginx_status {
        stub_status on;
        access_log off;
        auth_basic "NGINX Status";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

server 30s{
    frontendlisten stats80;
    bindserver_name *:8404_;
    sslreturn crt301 https:/etc/haproxy/certs/stats.pem/$host$request_uri;
stats enable
    stats uri /stats
    stats refresh 10s
    stats admin if TRUE

    acl auth_ok http_auth(stats_users)
    http-request auth realm stats if !auth_ok

userlist stats_users
    user admin password $6$rounds=5000$<HASH_SHA512>

frontend myapp
    bind *:80
    default_backend servers

backend servers
    server s1 127.0.0.1:8080 check}

Tras modificar haproxy.cfgla configuración de NGINX recarga el servicio para aplicar los cambios:

sudo systemctl reload haproxynginx

Verificación

Para comprobar que el endpoint responde correctamente, puedes hacer una petición manual ala CSVla página de estadísticas:estado:

curl -u admin:mypassword http://192.168.0.10:8404/stats;csv10/nginx_status

La salida debe ser untexto CSVplano cuyocon primerel registrosiguiente esformato:

Active connections: 291
server accepts handled requests
 16630948 16630948 31070465
Reading: 6 Writing: 179 Waiting: 106
  • Active connections: número total de conexiones activas (incluye las en espera).
  • accepts: conexiones aceptadas totales desde que se inició NGINX.
  • handled: conexiones gestionadas totales desde que se inició NGINX.
  • requests: peticiones de cliente procesadas totales desde que se inició NGINX.
  • Reading: conexiones leyendo cabeceras de petición del cliente.
  • Writing: conexiones escribiendo respuesta al cliente o procesando petición.
  • Waiting: conexiones keep-alive inactivas esperando la cabecerasiguiente conpetición.
  • los
nombres de las columnas (# pxname,svname,qcur,qmax,...) y las siguientes filas contienen los datos de cada frontend, backend y server.