Reverzný proxy pre GLPI: konfigurácia Nginx a Caddy

Reverzný proxy pre GLPI: konfigurácia Nginx a Caddy

GLPI sa vo väčšine distribúcií dodáva s Apache ako default web server. Pre jednu internú inštanciu to stačí, ale väčšina produkčných nasadení končí s GLPI za reverzným proxy — pre TLS termination, viacero hostnameov, security headers a konsolidáciu s ďalšími službami na tom istom hoste. Tento článok je o funkčnej konfigurácii dvoch najbežnejších volieb: Nginx a Caddy.

Prečo vôbec reverzný proxy

Otázky „naozaj to potrebujem" a „čo to skutočne rieši" stoja za odpoveď hneď na úvod:

  • TLS termination — terminovanie HTTPS na proxy znamená, že GLPI PHP/Apache vrstva môže lokálne hovoriť plain HTTP. Obnova certifikátu sa rieši na jednom mieste.
  • Hostname routing — jeden server hostuje glpi.firma.sk, monitoring.firma.sk, wiki.firma.sk. Proxy smeruje podľa Host hlavičky.
  • Security headers — HSTS, CSP, X-Frame-Options, Referrer-Policy sa pridajú na proxy bez zmeny GLPI PHP zdroja.
  • Cachovanie statických zdrojov — JS, CSS, obrázky cachované na proxy znižujú záťaž PHP backendu.
  • Mitigácia bot/abuse — rate limiting, IP allowlists pre admin cesty, základné WAF pravidlá patria do proxy vrstvy.

Konfigurácia Nginx

Nginx je heavyweight voľba — robustný, široko nasadený, dobre pochopený. Funkčná konfigurácia pre /etc/nginx/sites-available/glpi.conf:

server {
    listen 80;
    server_name glpi.firma.sk;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name glpi.firma.sk;

    ssl_certificate     /etc/letsencrypt/live/glpi.firma.sk/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/glpi.firma.sk/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    # Security headers
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;

    client_max_body_size 100M;  # uploady príloh GLPI

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_read_timeout 300s;
    }

    # Statické zdroje agresívne cachované
    location ~* \.(js|css|png|jpg|svg|woff2)$ {
        proxy_pass http://127.0.0.1:8080;
        proxy_cache_valid 200 7d;
        add_header Cache-Control "public, max-age=604800";
    }
}

Lokálny Apache (alebo PHP-FPM) počúva na 127.0.0.1:8080; navonok je vystavený iba Nginx na 80/443.

Konfigurácia Caddy

Caddy je jednoduchšia voľba — automatický Let's Encrypt, sensible defaults, jeden krátky config súbor. Ten istý scenár v /etc/caddy/Caddyfile:

glpi.firma.sk {
    reverse_proxy 127.0.0.1:8080 {
        header_up Host {host}
        header_up X-Real-IP {remote_host}
        header_up X-Forwarded-Proto https
    }

    header {
        Strict-Transport-Security "max-age=31536000; includeSubDomains"
        X-Frame-Options "SAMEORIGIN"
        X-Content-Type-Options "nosniff"
        Referrer-Policy "strict-origin-when-cross-origin"
    }

    request_body {
        max_size 100MB
    }

    @static {
        path *.js *.css *.png *.jpg *.svg *.woff2
    }
    header @static Cache-Control "public, max-age=604800"
}

Caddy automaticky provisionuje a obnovuje TLS certifikát pri prvom requeste — žiadny separátny certbot proces, žiadny manuálny renewal cron. Pre väčšinu GLPI nasadení to stačí; siahnete po Nginx-e keď potrebujete jeho granulárnejšie tuning možnosti alebo už ho prevádzkujete pre iné služby.

Čo zmeniť v samotnom GLPI

Za reverzným proxy GLPI vidí request ako prichádzajúci z 127.0.0.1, nie z pôvodnej IP klienta. Aby audit logy a rate limiting fungovali správne:

  1. V Setup → General → System → Trusted Proxies pridajte 127.0.0.1 (alebo IP proxy).
  2. GLPI potom dôveruje X-Forwarded-For hlavičke pre atribúciu IP klienta.
  3. Ak GLPI URL config interne používa http://, aktualizujte Setup → General → URL of the application na verejný https://glpi.firma.sk. Toto ovplyvňuje e-mailové notifikácie, password-reset linky a OG obrázky.

Zabudnutie kroku 3 je častý gotcha — e-maily idú s http:// linkmi na localhost, ktoré vyzerajú ako phishing.

Časté pitfalls

  • Mixed content varovania — ak GLPI URL je nastavená na http:// ale proxy obsluhuje https://, prehliadače upozorňujú pri každej stránke. Opravte URL nastavenie.
  • Veľké uploady zlyhávajú — proxy aj PHP potrebujú zvýšiť client_max_body_size / upload_max_filesize. 100M je rozumné pre prílohy GLPI.
  • Dlho bežiaci cron cez API zasahuje proxy timeout — nastavte proxy_read_timeout 300s pre API cestu alebo spúšťajte cron cez CLI priamo na boxe.
  • Security headers konfliktia s iframe embed — ak embedujete GLPI do iného interného portálu, X-Frame-Options: SAMEORIGIN môže potrebovať stať sa ALLOW-FROM alebo byť nahradený CSP frame-ancestors.

Ako medzi nimi vybrať

Caddy zvoľte ak začínate od nuly, chcete minimálnu konfiguráciu a nemáte už existujúcu Nginx skill base. Nginx zvoľte ak ho už prevádzkujete pre iné služby, potrebujete granulárny tuning alebo chcete zdieľať patterny medzi nasadeniami. Obidva slúžia GLPI dobre; voľba je hlavne o tom, čo zapadá do existujúcich operations vášho tímu. Pre širší obraz GLPI deployment topológie pozri prehľad GLPI SaaS / hostingu.

Potrebujete pomôcť s touto témou?

Kontakt