Files
ENI-projet-piscine/infra/proxy/nginx.conf
T
Johan LEROY b3efb98208 feat(infra): reverse proxy Nginx et terminaison TLS devant la stack
Le SPA appelle /api/v1 en relatif et rien ne routait cet appel vers l'API
une fois en conteneur. Le cookie de rafraîchissement prend le préfixe
__Secure- dès que APP_ENV sort de local, donc sans HTTPS il n'était jamais
posé et l'authentification ne survivait pas à un rechargement de page.

Un service proxy, image officielle nginx dont la configuration est montée en
volume, devient le seul composant publié : 80 redirige vers 443 et sert le
défi ACME, 443 termine le TLS, sert le SPA sur / et l'API sur /api/ sous la
même origine, pose HSTS et CSP que l'application refuse délibérément de
poser, et ajoute une limitation de débit au frontal. Backend et frontend ne
sont plus publiés, la base et l'interface Mailpit sont ramenées sur la
boucle locale.

nginx lit toujours les deux mêmes fichiers de certificat : seule leur
fabrication varie, script openssl pour la démonstration, deploy-hook certbot
le jour où un domaine public existera. Le chemin ACME est livré et
documenté, pas exercé : sur une IP privée le défi HTTP-01 ne peut pas
aboutir.
2026-09-21 09:51:09 +02:00

41 lines
1.1 KiB
Nginx Configuration File

# Contrainte : les directives `limit_req_zone` ne sont valides que dans le bloc `http`.
# Les `location` de conf.d/enervision.conf s'y réfèrent par nom, `api` et `auth`.
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server_tokens off;
log_format enervision '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent $request_time '
'"$http_referer" "$http_user_agent"';
access_log /var/log/nginx/access.log enervision;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
client_max_body_size 2m;
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_proxied any;
gzip_types application/javascript application/json application/xml
image/svg+xml text/css text/plain;
limit_req_zone $binary_remote_addr zone=api:10m rate=20r/s;
limit_req_zone $binary_remote_addr zone=auth:10m rate=30r/m;
limit_req_status 429;
include /etc/nginx/conf.d/*.conf;
}