C'è un modo per passare l'identità del client a Nginx (per ottenere una sessione appiccicosa) quando si usano WebSockets? Qualcosa di simile all'intestazione "X-Forwarded-For" per HTTP?Nginx: qual è l'alternativa X-Forwarded-For per WebSockets?
risposta
Websocket iniziano la loro vita sotto un handshake di aggiornamento HTTP. Una volta completata l'handshake, si ottiene una connessione web-socket bidirezionale funzionante a lungo.
Se si utilizza Nginx come proxy per websocket, è possibile utilizzare anche "X-Forwarded-For" ma solo sull'handshake. Si veda ad esempio this simple configuration:
# WebSocket Proxy
#
# Simple forwarding of unencrypted HTTP and WebSocket to a different host
# (you can even use a different host instead of localhost:8080)
server {
listen 80;
# host name to respond to
server_name ws.example.com;
location/{
# switch off logging
access_log off;
# redirect all HTTP traffic to localhost:8080
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# WebSocket support (nginx 1.4)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
... e alcuni riferimenti su this page.
si configurano quello che Nginx deve inviare insieme alla richiesta di aggiornamento (le informazioni che utilizza per identificare il client) e sarà compito del server back-end di utilizzare le informazioni dalla stretta di mano per identificare il cliente e quindi associare il collegamento websocket al tuo cliente In base a tale associazione, tutti i messaggi che arrivano sulla connessione WebSocket appartengono al client precedentemente identificato.