Icingaweb2 unter nginx betreiben

8

Icinga2 ist in Kombination mit Icingaweb2 ein tolles Monitoring Werkzeug, das recht einfach zu installieren ist. Allerdings ist die Konfiguration für den Betrieb unter nginx keineswegs einfach und es gibt keine Anleitung im Netz, die komplett richtig ist und sofort funktioniert. Daher hier meine Anleitung.

Vorbedingungen:

  • Icinga2 und Icingaweb2 wurde nach dem obigen Link installiert.
  • Icinga2 soll unter einer Subdomain betrieben werden.
  • Letsencrypt / Zertifikate stehen zur Verfügung.
  • Icingaweb2 wurde unter /usr/share/icingaweb2/ installiert.
  • Der PHP Prozess läuft unter dem Socket php5-fpm.sock.

Wenn eine Bedingung nicht erfüllt sein sollte, bitte im Code anpassen.

server {
 listen 80;
 listen [::]:80;
 server_name icinga.xy.de;
 return 301 https://$server_name$request_uri;
}

server {
 listen 443 ssl http2;
 listen [::]:443 ssl http2;
 ssl_certificate /etc/letsencrypt/live/xy.de/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/xy.de/privkey.pem;
 add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
 server_name icinga.xy.de;
 index index.php;
 root /usr/share/icingaweb2/public;
 error_log /var/log/nginx/error.log;
 
 location = /favicon.ico {
 log_not_found off;
 access_log off;
 expires max;
 }

 location = /robots.txt {
 allow all;
 log_not_found off;
 access_log off;
 }

 location ~ /\. {
 deny all;
 access_log off;
 log_not_found off;
 }

 location ~ \..*/.*\.php$ {
 return 403;
 }
 
 if (!-d $request_filename) {
 rewrite ^/(.+)/$ /$1 permanent;
 }

 location / {
 try_files $1 $uri $uri/ /index.php$is_args$args;
 }

 location ~ ^/index\.php(.*)$ {
 fastcgi_index index.php;
 include /etc/nginx/fastcgi_params;
 try_files $uri =404;
 fastcgi_split_path_info ^(.+\.php)(/.+)$;
 fastcgi_pass unix:/var/run/php5-fpm.sock;
 fastcgi_param SCRIPT_FILENAME /usr/share/icingaweb2/public/index.php;
 fastcgi_param ICINGAWEB_CONFIGDIR /etc/icingaweb2;
 fastcgi_param REMOTE_USER $remote_user;
 }
}
8 Comments
  1. Thomas says

    Hallo Benjamin,
    wenn ich die URL https://moni..de aufrufe erhalte ich lediglich den Inhalt der Datei /usr/share/icingaweb2/public/index.php als Ausgabe.

    Ich nehme an irgendetwas ist fehlerhaft mit meiner Nginx-Konfiguration.

    Frage:
    Wie soll denn der Aufruf der WebUI gemacht werden?
    https://moni..de oder
    https://moni..de/icingaweb2

    1. Benjamin Hartwich says

      Was meinst du mit Ausgabe? Wenn die Datei runtergeladen wird, dann stimmt was nicht mit deinen PHP Settings in FPM und überprüfe die Rechte auf den Dateien. Der PHP Prozess muss auf die Dateien zugreifen können, also chown -R benutzer:gruppe /usr/share/icingaweb2/

      Ich finde es immer sauberer wenn es ohne /icinga ist und meine Konfiguration basiert darauf.

  2. Thomas says

    Die URL im vorigen Post soll so aussehen:
    https://moni.mydomain.de
    und entsprechend in der Frage:
    https://moni.mydomain.de
    https://moni.mydomain.de/icingaweb2

  3. Thomas says

    OK.
    Die PHP-Settings überprüfen…
    Ich habe in /etc/php5/fpm/php.ini lediglich 1 Parameter angepasst: date.timezone = Europe/Berlin

    Alles andere ist so wie vom Paketmanager installiert.

    1. Benjamin Hartwich says

      Ne, ich meinte die pool-settings unter /etc/php5/fpm/pool…

      Dort legst du ja den PHP Listener fest für den Prozess. Ich vermute, dass es ein Dateirechte oder Ausführungsproblem ist. Einfach etwas rumprobieren und googlen.

  4. Thomas says

    Der php-fpm Socket läuft mit dem User www-data.
    root@vm-monitor:~# ls -l /var/run/php5*
    -rw-r–r– 1 root root 5 Jul 19 14:15 /var/run/php5-fpm.pid
    srw-rw—- 1 www-data www-data 0 Jul 19 14:15 /var/run/php5-fpm.sock

    Derselbe User ist Owner von /usr/share/icingaweb2/public:
    root@vm-monitor:~# ls -l /usr/share/icingaweb2/
    insgesamt 24
    drwxr-xr-x+ 9 root root 4096 Jul 19 01:47 application
    drwxr-xr-x+ 4 root root 4096 Jul 19 11:36 doc
    drwxr-xr-x+ 3 root root 4096 Jul 19 01:47 etc
    drwxr-xr-x+ 3 root root 4096 Jul 19 01:47 library
    drwxr-xr-x+ 6 root root 4096 Jul 19 01:47 modules
    drwxr-xr-x+ 6 www-data www-data 4096 Jul 19 15:07 public

    root@vm-monitor:~# ls -l /usr/share/icingaweb2/public/
    insgesamt 28
    drwxr-xr-x+ 6 www-data www-data 4096 Jul 19 11:36 css
    -rw-r–r– 1 www-data www-data 43 Jun 9 16:43 error_norewrite.html
    drwxr-xr-x+ 2 www-data www-data 4096 Jul 19 11:36 font
    drwxr-xr-x+ 5 www-data www-data 4096 Jul 19 11:36 img
    -rw-r–r– 1 www-data www-data 135 Jun 9 16:43 index.php
    drwxr-xr-x+ 4 www-data www-data 4096 Jul 19 11:36 js
    -rw-r–r– 1 www-data www-data 26 Jul 19 15:07 robots.txt

    Allerdings ist root der Owner von /usr/share/php/Icinga/Application/webrouter.php:
    root@vm105-monitor:~# ls -l /usr/share/php/Icinga/Application/
    insgesamt 148
    -rw-r–r– 1 root root 15380 Jun 9 16:43 ApplicationBootstrap.php
    -rw-r–r– 1 root root 8175 Jun 9 16:43 Benchmark.php
    -rw-r–r– 1 root root 8759 Jun 9 16:43 ClassLoader.php
    -rw-r–r– 1 root root 4812 Jun 9 16:43 Cli.php
    -rw-r–r– 1 root root 13385 Jun 9 16:43 Config.php
    -rw-r–r– 1 root root 1807 Jun 9 16:43 EmbeddedWeb.php
    -rw-r–r– 1 root root 2755 Jun 9 16:43 functions.php
    drwxr-xr-x+ 3 root root 4096 Jul 19 01:47 Hook
    -rw-r–r– 1 root root 6727 Jun 9 16:43 Hook.php
    -rw-r–r– 1 root root 1057 Jun 9 16:43 Icinga.php
    -rw-r–r– 1 root root 645 Jun 9 16:43 LegacyWeb.php
    drwxr-xr-x+ 3 root root 4096 Jul 19 01:47 Logger
    -rw-r–r– 1 root root 9182 Jun 9 16:43 Logger.php
    drwxr-xr-x+ 2 root root 4096 Jul 19 01:47 Modules
    -rw-r–r– 1 root root 11039 Jun 9 16:43 Platform.php
    -rw-r–r– 1 root root 1476 Jun 9 16:43 Version.php
    -rw-r–r– 1 root root 17231 Jun 9 16:43 Web.php
    -rw-r–r– 1 root root 2732 Jun 9 16:43 webrouter.php

    Unter welchem Benutzer läuft bei dir der Webserver? www-root?
    Wer ist der Owner der Dateien unter /usr/share/php/Icinga?

  5. Lennart says

    Nach ewigem Config suchen hat deine Konfiguration auf Anhieb funktioniert. Danke Benjamin.

  6. Pinaute says

    I’m looking for a script, it works perfectly, thanks.

Leave A Reply

Your email address will not be published.