Statup
Langue, Français
GitHub
Premiers pas / Derrière un reverse proxy

Premiers pas

Derrière un reverse proxy

Servir Statup en HTTPS sous un nom à vous, avec nginx, Caddy, IIS ou tout proxy qui pose les en-têtes habituels.

Statup parle en HTTP simple sur le port 3000. Pour le HTTPS et un nom comme status.example.com, placez un reverse proxy devant : il porte le certificat et transmet les requêtes.

Publier Statup sur la boucle locale uniquement

Pour que personne ne joigne Statup en contournant le proxy, publiez-le sur l’adresse de boucle locale de l’hôte. Dans docker-compose.yml, sous ports: :

YAML
ports:
  - "127.0.0.1:3000:3000"

Puis, dans .env :

.env
PUBLIC_URL=https://status.example.com
TRUST_PROXY_HEADERS=true

Relancez docker compose up -d.

Installé sans Docker, choisissez local à la question de l’écoute (Linux, Windows Server), et ajoutez les deux réglages à /etc/statup/statup.env ou C:\ProgramData\Statup\statup.env.

Ce que changent ces deux réglages

  • PUBLIC_URL est l’adresse de chaque lien écrit par Statup, dans le flux et dans les alertes. Son https:// marque le cookie de session Secure et active HSTS.
  • TRUST_PROXY_HEADERS fait lire à Statup l’adresse du client dans la dernière entrée de X-Forwarded-For, celle que votre proxy a ajoutée, quoi qu’un client ait envoyé avant elle, et le schéma dans X-Forwarded-Proto. C’est cette adresse qu’utilisent les limites de requêtes et le Journal.

nginx, Caddy, Traefik, Apache et HAProxy (avec option forwardfor) ajoutent tous l’adresse à X-Forwarded-For. Si votre proxy l’écrit dans un autre en-tête, indiquez cet en-tête dans CLIENT_IP_HEADER.

Attention

Ne réglez jamais TRUST_PROXY_HEADERS=true quand Statup est joignable directement : n’importe qui pourrait alors choisir sa propre adresse et contourner les limites de requêtes.

nginx

nginx
location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    client_max_body_size 256m;
}

client_max_body_size laisse passer une icône de 1 Mo et une sauvegarde jusqu’à 256 Mo pour Restaurer une sauvegarde : nginx refuse de lui-même une requête de plus de 1 Mo.

Caddy

Caddy pose les deux en-têtes de lui-même :

Caddyfile
status.example.com {
    reverse_proxy 127.0.0.1:3000
}

IIS

Sous Windows Server, IIS fait de même avec deux modules de Microsoft : URL Rewrite et Application Request Routing, installés dans cet ordre. Statup écoute sur cette machine seulement (-Listen local à l’installation), avec les deux réglages ci-dessus dans C:\ProgramData\Statup\statup.env, puis Restart-Service Statup.

Dans PowerShell en administrateur, activez le proxy d’Application Request Routing, et autorisez la règle ci-dessous à poser X-Forwarded-Proto :

powershell
$appcmd = "$env:windir\system32\inetsrv\appcmd.exe"
& $appcmd set config -section:system.webServer/proxy /enabled:True /commit:apphost
& $appcmd set config -section:system.webServer/rewrite/allowedServerVariables "/+[name='HTTP_X_FORWARDED_PROTO']" /commit:apphost

Donnez au site une liaison HTTPS avec votre certificat, puis placez ce web.config dans son dossier, C:\inetpub\wwwroot pour le site par défaut :

xml
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Statup" stopProcessing="true">
          <match url="(.*)" />
          <serverVariables>
            <set name="HTTP_X_FORWARDED_PROTO" value="https" />
          </serverVariables>
          <action type="Rewrite" url="http://127.0.0.1:3000/{R:1}" />
        </rule>
      </rules>
    </rewrite>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="268435456" />
      </requestFiltering>
    </security>
    <httpErrors existingResponse="PassThrough" />
  </system.webServer>
</configuration>
  • Application Request Routing ajoute l’adresse du client à X-Forwarded-For, que lit TRUST_PROXY_HEADERS.
  • maxAllowedContentLength laisse passer une sauvegarde jusqu’à 256 Mo pour Restaurer une sauvegarde : IIS refuse de lui-même une requête de plus de 30 Mo.
  • existingResponse="PassThrough" garde les pages d’erreur de Statup, pas celles d’IIS.