2016-06-18 3 views
0

Undertow 서버를 사용하여 웹 소켓을 사용할 수있게했습니다. Undertow 서버를 직접 실행하면 WebSocket이 잘 작동합니다. HTTPS를 사용하여 내 페이지를 제공하고 javacript에서 "wss:"을 사용하여 끝점을 테스트합니다. 작동합니다.Undertow를 서버로 사용하는 WebSocket에 대해 Apache를 역방향 프록시로 사용하는 방법

하지만 이제 Apache를 역방향 프록시로 사용하려고 시도하고 WebSocket 연결을 통해 Undertow 서버에 연결하려고합니다. 여기

<VirtualHost *:80 *:443> 
    ServerName test.example.org 

    SSLEngine on 
    SSLCertificateFile /etc/letsencrypt/live/example.org/cert.pem 
    SSLCertificateKeyFile /etc/letsencrypt/live/example.org/privkey.pem 
    SSLCertificateChainFile /etc/letsencrypt/live/example.org/chain.pem 

    ProxyPass/http://test.example.org:44444/ 
    ProxyPassReverse/http://test.example.org:44444/ 

</VirtualHost> 

이 물러가 HTTP 포트 44444에서 서버 (안 HTTPS)와 SSL 보안이 아파치에 의해 수행 될 때 시작됩니다 : 이것은 내 현재 가상 호스트입니다.

모든 HTML 페이지는 잘 작동하지만, 나는 웹 소켓 연결을 시작하려고 할 때이 오류 (크롬) 얻을 : 내가 네트워크 탭을 볼 때, 나는 실제로 볼

WebSocket connection to 'wss://test.example.org/websockets/echo' failed: Error during WebSocket handshake: 'Upgrade' header is missing 

과, "wss : //"호출이 이루어질 때 "Connection: Upgrade"과 "Upgrade: WebSocket"이라는 두 개의 헤더가 서버의 응답에서 누락되었습니다. 그 헤더들 은 아파치가없는 Undertow에 직접 연결했을 때입니다.

은 " Sec-WebSocket-Accept"와 " Sec-WebSocket-Location"헤더가 있지만, 나는이 두 번째 문제 것 같다 " Sec-WebSocket-Location" 'WS는 : //test.example.org/websockets/echo'아니다 ' WSS : //test.example.org/websockets/echo 'Undertow는 HTTPS가 아니라 HTTP에서 실행되기 때문에.

마지막으로 mod_proxy_wstunnel 설명서에 "연결이 자동으로 웹 소켓 연결으로 업그레이드되었습니다."라고 표시됩니다. 이것은 무엇을 의미 하는가? Apache가 HTTP 연결을 WebSocket 연결로 업그레이드하고 있습니까? 이건 이 아니고, 내가 원하는 걸! 초기 HTTP 요청 및 업그레이드 프로세스 을 처리하고자합니다. Undertow를 사용하여입니다. 초기 HTTP 연결의 정보를 사용하여 사용자가 요청 된 끝점에 연결할 수 있는지 확인하고, 그렇다면 Undertow의 WebSocketProtocolHandshakeHandler#handleRequest(exchange)을 프로그래밍 방식으로 호출하여 WebSocket 연결로 업그레이드합니다. 나는 아파치가 모든 것을 방해하지 않고 통과 시키길 원한다.

Apache 역 프록시에서 Undertow를 사용하여 WebSocket을 실행하는 방법에 대한 도움이 필요합니까?

답변

1

피곤해서 Nginx을 시도하기로 결정했습니다.

3 시간 내에서만 WebSockets working을 얻을 수있을뿐만 아니라 서버의 모든 사이트를 서버로 옮겼습니다. 슈퍼 쉽습니다. nginx.conf에서

WebSocket을위한 마법의 라인은 다음과 같습니다

proxy_set_header Upgrade $http_upgrade; 
proxy_set_header Connection "upgrade"; 

나는 "업그레이드하는 것은"명시 적으로 유지되도록 구성해야하는 특별한 "홉별"헤더는 것을 이해합니다.

아파치와 비슷한 해결책이 있기를 바랍니다. 그러나이 문서에 대한 문서는 거의 없습니다.