/ / NGINX ne passe pas les en-têtes au noeud final Websocket - nginx, websocket

NGINX ne passe pas les en-têtes au noeud final Websocket - nginx, websocket

J'essaie de configurer nginx en tant que proxy inversecela fait l'authentification et websockets. Le proxy transmet la requête à apache (/ auth / wsgi) pour s’authentifier. Une fois que cela réussit, il est ensuite transmis au serveur Web à l’arrière, qui est un point de terminaison Websocket basé sur Java sur tomcat 8.

location /basic/alerting/websocket {
auth_request /auth/wsgi;
proxy_pass http://backend.com:8080/websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade "Websocket";
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}

L'authentification sur Apache réussit. Cependant, sur le tomcat backend, j'obtiens cette erreur:

12572237 [http-nio-8080-exec-10] ERREUR org.springframework.web.socket.server.support.DefaultHandshakeHandler - handleWebSocketVersionNotSupported () La prise de contact a échoué en raison d'une version de WebSocket non prise en charge: null. Versions prises en charge: [13]

Il semble que cet échec soit dû au fait que le serveur attend l'en-tête ("Sec-WebSocket-Version") qui n'est pas transmis. Je vois même dans les journaux nginx:

2015/03/17 17:28:12 [debug] 20261 # 0: * En-tête de proxy http 718: "Sec-WebSocket-Version: 13"

Dois-je faire quelque chose dans la configuration de nginx? J'apprécie beaucoup votre aide.

Réponses:

1 pour la réponse № 1

Le problème est que Nginx ne "passe pas tous les en-têtes" Sec-WebSocket- * ". Ensuite, la méthode AbstractHandshakeHandler.java # handleWebSocketVersionNotSupported () va jeter l'exception.

Le correctif est que Nginx copie tous les en-têtes "Sec-WebSocket- *". En-têtes de demande: Sec-WebSocket-Extensions, Sec-WebSocket-Key, Sec-WebSocket-Protocol, Sec-WebSocket-Version En-têtes de réponse: Sec-WebSocket-Accept, Sec-WebSocket-Extensions, Sec-WebSocket-Protocol

Pour copier un en-tête Nginx personnalisé, vous devez procéder comme suit:

proxy_set_header Sec-WebSocket-Protocol $http_sec_websocket_protocol