Skip to content

Commit 54e2b23

Browse files
committed
feat: update reverse proxy configuration for Nginx
- Enhanced the Nginx configuration for WebSocket and HTTP traffic management, including a complete example for Docker setup. - Added detailed instructions for common errors and their resolutions related to WebSocket connections. - Updated proxy settings to ensure proper handling of requests to the Nuxt application, improving overall stability and performance.
1 parent eb06609 commit 54e2b23

1 file changed

Lines changed: 55 additions & 10 deletions

File tree

docs/reverse-proxy.md

Lines changed: 55 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,11 @@ Le navigateur ne parle **qu’au frontal Nuxt** (port `3000` dans le conteneur,
2929

3030
## Nginx
3131

32-
### En-têtes WebSocket (recommandé)
32+
### Exemple complet (Docker, réseau `reverse`)
3333

34-
Utiliser une `map` pour gérer `Connection` correctement (préférable à `Connection "upgrade"` fixe) :
34+
Configuration validée en production : redirection HTTP → HTTPS, tout le trafic (REST + Socket.IO WebSocket) vers Nuxt `:3000`.
35+
36+
La `map` doit être déclarée **au niveau `http`** (dans `nginx.conf` ou un fichier inclus), pas dans le `server` :
3537

3638
```nginx
3739
map $http_upgrade $connection_upgrade {
@@ -40,14 +42,20 @@ map $http_upgrade $connection_upgrade {
4042
}
4143
4244
server {
43-
listen 443 ssl http2;
45+
listen 80;
46+
server_name sesame.example.com;
47+
return 301 https://$host$request_uri;
48+
}
49+
50+
server {
51+
listen 443 ssl;
4452
server_name sesame.example.com;
4553
4654
# ssl_certificate ...
4755
# ssl_certificate_key ...
4856
4957
location / {
50-
proxy_pass http://127.0.0.1:3000; # ou nom du service Docker : http://sesame-orchestrator:3000
58+
proxy_pass http://sesame-orchestrator:3000;
5159
proxy_http_version 1.1;
5260
5361
# WebSocket (Socket.IO sur /api/socket.io)
@@ -66,11 +74,32 @@ server {
6674
}
6775
```
6876

69-
### Variante minimale (équivalent à ta snippet)
77+
Sur l’hôte sans réseau Docker `reverse`, remplacer `http://sesame-orchestrator:3000` par `http://127.0.0.1:3000` (ou le port publié, ex. `3002`).
78+
79+
Après modification :
80+
81+
```bash
82+
nginx -t && nginx -s reload
83+
```
84+
85+
### Erreurs fréquentes Nginx
86+
87+
| Erreur | Symptôme navigateur | Correction |
88+
| --- | --- | --- |
89+
| Pas de `proxy_http_version 1.1` ni d’en-têtes `Upgrade` / `Connection` | `WebSocket connection to 'wss://…/api/socket.io/…' failed` | Ajouter les directives WS **dans** `location /` (voir exemple ci-dessus) |
90+
| `proxy_set_header` placés **en dehors** du bloc `location` | REST OK, WebSocket KO, IP client parfois incorrecte | Déplacer tous les `proxy_set_header` **à l’intérieur** de `location /` |
91+
| Vhost séparé `listen 4000` vers l’API | Confusion de routage, contournement de Nuxt | Supprimer l’exposition directe du port `4000` ; tout passe par le vhost `443``:3000` |
92+
| `proxy_pass` vers le port `4000` | Socket.IO et auth IP incohérents | Cibler uniquement `sesame-orchestrator:3000` |
93+
94+
> **À éviter** : router `/socket.io`, `/api` ou `/api/socket.io` directement vers le port `4000` — le front utilise le chemin `/api/socket.io` via Nuxt.
95+
96+
### Variante minimale
97+
98+
Si la `map` n’est pas disponible :
7099

71100
```nginx
72101
location / {
73-
proxy_pass http://127.0.0.1:3000;
102+
proxy_pass http://sesame-orchestrator:3000;
74103
proxy_http_version 1.1;
75104
proxy_set_header Upgrade $http_upgrade;
76105
proxy_set_header Connection "upgrade";
@@ -81,8 +110,6 @@ location / {
81110
}
82111
```
83112

84-
> **À éviter** : router `/socket.io` ou `/api` directement vers le port `4000` — le front utilise le chemin `/api/socket.io` via Nuxt.
85-
86113
---
87114

88115
## Apache (2.4+)
@@ -171,10 +198,28 @@ proxy_pass http://sesame-orchestrator:3000;
171198

172199
| Symptôme | Cause probable |
173200
| --- | --- |
201+
| `WebSocket connection to 'wss://…/api/socket.io/…' failed` | Nginx/Apache sans `Upgrade` / `Connection` / `proxy_http_version 1.1` |
174202
| `Invalid frame header` (navigateur) | Upgrade WS non proxifié (HTTP renvoyé à la place) |
175203
| Socket.IO reste en `polling` uniquement | `NUXT_PUBLIC_SOCKET_IO_POLLING_ONLY=true` ou reverse-proxy sans WS |
176-
| Auth `ip not allowed` + `127.0.0.1` | `SESAME_TRUST_PROXY=0` ou en-têtes `X-Forwarded-For` / `X-Real-IP` absents |
177-
| WS OK en `make simulation`, KO derrière proxy | Config WS manquante sur Nginx/Apache (ce document) |
204+
| Auth `ip not allowed` + `127.0.0.1` | `SESAME_TRUST_PROXY=0` ou en-têtes `X-Forwarded-For` / `X-Real-IP` absents ou hors `location` |
205+
| WS OK en `make simulation`, KO derrière proxy | Config WS manquante sur Nginx/Apache (voir [Erreurs fréquentes Nginx](#erreurs-fréquentes-nginx)) |
206+
207+
### Tests sur le serveur
208+
209+
```bash
210+
# Polling HTTP via Nuxt (doit répondre, pas 502)
211+
curl -sI "http://sesame-orchestrator:3000/api/socket.io/?EIO=4&transport=polling"
212+
213+
# Upgrade WebSocket via Nuxt (doit renvoyer HTTP 101)
214+
curl -i -N \
215+
-H "Connection: Upgrade" \
216+
-H "Upgrade: websocket" \
217+
-H "Sec-WebSocket-Version: 13" \
218+
-H "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==" \
219+
"http://sesame-orchestrator:3000/api/socket.io/?EIO=4&transport=websocket"
220+
```
221+
222+
Si `101` en local mais échec via HTTPS public → corriger le reverse-proxy externe (vhost `443`).
178223

179224
### Test local (sans reverse-proxy externe)
180225

0 commit comments

Comments
 (0)