Configuración de Nginx para utilizar Nagios + PNP4Nagios instalados de forma estándar

Versiones del software utilizadas en esta guía:

Si se ha instalado Nagios / PNP4Nagios de forma predeterminada, es decir, partiendo del paquete de fuentes una configuración y compilación sin modificar directorios de instalación, estas serían las rutas utilizadas.

Depende de como se haya instalado Nginx, algunos directorios (directivas include) y el usuario de Nginx (nobody) pueden ser diferente, se debe revisar la ubicación del fichero donde encuentran las credenciales de acceso (htpasswd.users) y la forma de comunicación con php-fpm. La configuración actual funciona correctamente en instalación de Nginx desde el código fuente (Ver versión).

Configuración de Nginx para Nagios y PNP4Nagios (Optativo).

nginx.conf
user nobody nobody;  
 
 events {  
 
 }  
 
 http {  
 
 include mime.types;  
 default_type application/octet-stream;  
 
server {
 
    listen 80;
 
    server_name XXXXXXX;
    access_log /var/log/nginx/nagios-access.log;
    error_log /var/log/nginx/nagios-error.log;
 
    auth_basic "Private";
    auth_basic_user_file /usr/local/nagios/htpasswd.users;
 
    root /usr/local/nagios/share;
    index index.php index.html;
 
    location / {
        try_files $uri $uri/ index.php /nagios;
    }
 
 
    location /nagios {
        alias /usr/local/nagios/share;
    }
 
    location ~ ^/nagios/(.*\.php)$ {
        alias /usr/local/nagios/share/$1;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
	fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }
 
    location ~ \.cgi$ {
            root /usr/local/nagios/sbin/;
            rewrite ^/nagios/cgi-bin/(.*)\.cgi /$1.cgi break;
            fastcgi_param AUTH_USER $remote_user;
            fastcgi_param REMOTE_USER $remote_user;
            include /etc/nginx/fastcgi_params;
            fastcgi_pass unix:/var/run/fcgiwrap.socket;
      }
 
    location ~ \.php$ {
            include /etc/nginx/fastcgi_params;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
      }
 
    ######################################################### Optativo!, solo si está instalado PNP4Nagios
    location /pnp4nagios {
            alias /usr/local/pnp4nagios/share;
      }
 
 
    location ~ ^(/pnp4nagios.*\.php)(.*)$ {
            root /usr/local/pnp4nagios/share/;
            include fastcgi_params;
            fastcgi_split_path_info ^(.+\.php)(.*)$;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param SCRIPT_FILENAME $document_root/index.php;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
    }
 
   #########################################################
 
}  
 } 

Recomendación / Aviso: Las últimas versiones de Nagios no han implementado todavía este parche. De no tener instalado Nagios habiendo aplicado dicho parche sobre su código fuente, los registros de Nagios cuando este opera junto a PNP4Nagios pueden hacerse muy extensos.

Configuración de Nginx como proxy reverso para un Nagios remoto

Puede ser interesante en determinados casos, tener un servidor Nginx que simplemente muestre bajo otro dominio el entorno Nagios instalado en otro host remoto.

El dominio “DOMINIO_LOCAL” Mostrará el panel web Nagios de “NAGIOS_REMOTO”. La URLhttps://DOMINIO_LOCAL” mostrará “https://NAGIOS_REMOTO

server {
       listen         80;
       server_name    "DOMINIO_LOCAL";
       return         301 https://$server_name/nagios/;
}

server {
 
  listen 443 ssl;
  server_name DOMINIO_LOCAL;

    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";


location = / {
    rewrite ^ https://DOMINIO_LOCAL/nagios/ permanent;
  }
 
location / {
   # proxy_pass https://NAGIOS_REMOTO:7777;# Si se usa un puerto que no es el estándar (443).
   proxy_pass https://NAGIOS_REMOTO;
   proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
   proxy_redirect off;
   proxy_buffering off;
   proxy_set_header        Host            DOMINIO_LOCAL;
   proxy_set_header        X-Real-IP       $remote_addr;
   proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

   }
}