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을 실행하는 방법에 대한 도움이 필요합니까?