Architecture Nginx¶
Nginx est le serveur web principal pour le réseau local et le fournisseur de fichiers statiques pour le système. Il complète Traefik en gérant tout ce qui est "interne" ou "non sécurisé" (HTTP local).
Vue d'ensemble¶
Nginx remplit trois rôles distincts dans l'architecture Essensys :
- Serveur Local (Port 80) : Point d'entrée pour tous les utilisateurs sur le réseau local (
http://mon.essensys.fr). - Reverse Proxy Local : Redirige les appels API locaux vers le backend Go.
- Serveur de Fichiers Interne (Port 9090) : Sert les fichiers du frontend (SPA) à Traefik pour l'accès distant.
graph TD
subgraph LocalNetwork [Réseau Local]
UserLocal((Utilisateur Local))
end
subgraph InternalSystem [Système Raspberry Pi]
Traefik[Traefik Proxy]
subgraph NginxContext [Nginx]
Server80[Server Port 80<br/>Local Access]
Server9090[Server Port 9090<br/>Internal Only]
end
Backend[Backend API<br/>Port 7070]
Files[(Fichiers Frontend<br/>/dist)]
end
%% Acces Local
UserLocal -->|HTTP| Server80
Server80 -->|/api/*| Backend
Server80 -->|/*| Files
%% Acces Distant (via Traefik)
Traefik -->|Proxy vers interne| Server9090
Server9090 -->|Sert fichiers| Files Configuration¶
1. Accès Local (/etc/nginx/sites-available/essensys)¶
C'est la configuration principale exposée sur le port 80.
- Fichier :
nginx-config/essensys.template - Fonctionnalités :
- SPA Routing : Utilise
try_files $uri $uri/ /index.htmlpour supporter le routage React. - Proxy API : Redirige
/api/vers127.0.0.1:7070. - Compatibilité Legacy : Configuration spécifique pour les vieux clients Ethernet (voir ci-dessous).
- SPA Routing : Utilise
2. Service Interne (nginx-frontend-internal.conf)¶
Un serveur minimaliste écoutant sur le port 9090.
- But : Servir les fichiers statiques à Traefik.
- Pourquoi ? Traefik gère l'authentification et le SSL, puis a besoin de récupérer le contenu. Plutôt que de dupliquer la logique de service de fichiers dans Traefik, on utilise Nginx comme "backend de fichiers statiques".
- Sécurité : Ce port n'est pas exposé à l'extérieur (firewall), il est bloqué sur localhost.
Routage API et Compatibilité Legacy¶
Le système doit supporter des cartes électroniques anciennes (Client BP_MQX_ETH) qui ont une implémentation TCP/IP limitée.
Problématique : Ces clients plantent si la réponse HTTP est fragmentée en plusieurs paquets TCP ou si elle est compressée.
Solution dans Nginx (Port 80) :
location /api/ {
# 1. Désactiver la fragmentation (Bufferisation totale)
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 4k;
# 2. Désactiver la compression
gzip off;
# 3. Headers stricts
proxy_set_header Connection "close";
# 4. Proxy vers Go
proxy_pass http://127.0.0.1:7070/api/;
}
Logs et Diagnostic¶
Nginx génère des logs détaillés pour aider au débogage des clients IoT.
| Log File | Description |
|---|---|
essensys-access.log | Journal d'accès standard. |
essensys-error.log | Erreurs Nginx (configuration, fichiers manquants). |
essensys-api-detailed.log | Critique. Log formaté sur mesure incluant les temps de réponse backend, headers spécifiques, et tailles de paquets pour diagnostiquer les problèmes réseaux avec les cartes. |