Files
Fail2banMqttActionBanishment/generic/nginx/fail2ban-emitter.example.conf
T
2026-07-20 11:05:07 +02:00

82 lines
3.6 KiB
Plaintext

# Reverse proxy nginx devant le tableau de bord Django (ASGI/Daphne,
# 127.0.0.1:8050) — WebSocket (Django Channels) inclus. PAS déployé
# automatiquement par install.sh : à copier et adapter manuellement.
#
# Pas de location /static/ dédiée ici : l'émetteur sert ses statiques
# lui-même via WhiteNoise (emitter/config/settings/production.py,
# CompressedManifestStaticFilesStorage), donc tout — /static/ compris —
# passe par le proxy_pass général vers Daphne. Ça évite une dépendance aux
# droits Unix sur staticfiles/ pour l'utilisateur nginx (ex. un $HOME en
# 700 empêche www-data de traverser jusqu'au dossier, même si staticfiles/
# lui-même est world-readable — vécu en déployant banishing.miraceti.net).
#
# Marche à suivre :
# 1. sudo apt-get install nginx
# 2. sudo certbot certonly --nginx -d __DASHBOARD_DOMAIN__ (ou webroot,
# selon la méthode déjà utilisée pour les autres domaines de ce VPS)
# 3. sed "s#__DASHBOARD_DOMAIN__#dashboard.example.org#g" \
# generic/nginx/fail2ban-emitter.example.conf \
# | sudo tee /etc/nginx/sites-available/fail2ban-emitter.conf
# 4. sudo ln -s /etc/nginx/sites-available/fail2ban-emitter.conf /etc/nginx/sites-enabled/
# 5. sudo nginx -t && sudo systemctl reload nginx
# 6. Dans .env : DJANGO_ALLOWED_HOSTS=__DASHBOARD_DOMAIN__,
# DJANGO_CSRF_TRUSTED_ORIGINS=https://__DASHBOARD_DOMAIN__,
# DJANGO_SECURE_SSL=true, puis redémarrer fail2ban-emitter-web.service
#
# Le renouvellement certbot recharge nginx automatiquement (paquet Debian,
# renewal-hooks intégré) — pas besoin d'un deploy-hook dédié comme pour
# mosquitto (nginx peut lire /etc/letsencrypt directement, contrairement à
# un utilisateur système non-root sans accès en lecture).
server {
listen 80;
listen [::]:80;
server_name __DASHBOARD_DOMAIN__;
location /.well-known/acme-challenge/ {
root /var/www/html;
}
location / {
return 301 https://$host$request_uri;
}
}
server {
# Forme choisie automatiquement par install.sh (deploy_nginx) selon la
# version nginx détectée sur CE noeud : la directive séparée "http2 on;"
# n'existe qu'à partir de nginx 1.25.1 ("unknown directive http2" sur
# une version plus ancienne — vécu en conditions réelles) ; avant cette
# version, c'est l'inverse : la forme séparée n'existe pas encore, seul
# "listen ... http2" est valide. Ne jamais coder l'une des deux en dur
# ci-dessous (marqueur substitué par install.sh — ne pas le répéter
# ailleurs dans ce fichier, y compris en commentaire : la substitution
# est un remplacement global, toute autre occurrence littérale serait
# aussi affectée).
__HTTP2_LISTEN_BLOCK__
server_name __DASHBOARD_DOMAIN__;
ssl_certificate /etc/letsencrypt/live/__DASHBOARD_DOMAIN__/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/__DASHBOARD_DOMAIN__/privkey.pem;
location /ws/ {
proxy_pass http://127.0.0.1:8050;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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 $scheme;
proxy_read_timeout 3600s;
}
location / {
proxy_pass http://127.0.0.1:8050;
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 $scheme;
}
}