首页 > 解决方案 > 如何在 Apache 到 Tomcat 上配置 WSS 到 WS

问题描述

我有一个使用 websockets 在 Tomcat 上运行的聊天机器人应用程序。为了让聊天机器人可以从安全 (HTTPS) 网站访问,我需要支持 SSL 证书。我没有将 Lets Encrypt 证书放在 Tomcat 上,而是将其安装在 Apache 上(因为这很容易从控制面板完成)并将 Apache 放在 Tomcat 前面。通过 HTTP ( http://example.com/myapp/?key=88 ) 访问应用程序时,应用程序工作正常,但通过 HTTPS ( https://example.com访问应用程序时,浏览器无法连接到 wss url /myapp/?key=88)。所以我正在尝试将 wss: 流量从浏览器转换为 ws: 以便应用程序可以从安全网站工作,而无需在 Tomcat 上安装 SSL

我需要转换的 URL 是 wss://example.com:8080/myapp/socketendpoint/88
,其中 URL 末尾的数字因不同的机器人而异。

需要转换成ws://example.com:8080/myapp/socketendpoint/88

我尝试了以下 Apache 配置(尝试各种来源的想法)

<VirtualHost x.y.z.w:80>

RewriteEngine on
RewriteCond ${HTTP:Upgrade} websocket [NC]
RewriteCond ${HTTP:Connection} upgrade [NC]
RewriteRule ^/myapp/(.*) ws://example.com:8080/myapp/$1 [P,L]
ProxyPass /myapp http://example.com:8080/myapp
ProxyPassReverse /myapp http://example.com:8080/myapp

</VirtualHost>

<VirtualHost x.y.z.w:443>

SSLCertificateChainFile "......"
SSLCertificateFile "......."
SSLCertificateKeyFile "......."
SSLCipherSuite EECDH:+AES256:-3DES:RSA+AES:!NULL:!RC4
SSLEngine on
SSLHonorCipherOrder on
SSLProtocol +TLSv1 +TLSv1.1 +TLSv1.2
SSLProxyEngine On
ProxyRequests Off
RewriteEngine On
RewriteCond %{REQUEST_URI}  ^/myapp[NC]
RewriteCond %{HTTP:Connection} upgrade [NC]
RewriteCond %{HTTP:Upgrade} websocket [NC]

ProxyPass /socketEndPoint/* ws://example.com:8080/myapp/socketendpoint/*
ProxyPassReverse /socketEndPoint/* ws://example.com:8080/myapp/socketendpoint/*
ProxyPass /myapp http://example.com:8080/myapp
ProxyPassReverse /myapp http://example.com:8080/myapp

</VirtualHost>

但是,Apache 正在记录错误

[proxy_http:error] [pid nnnn] (70007)指定的超时已过期:[client xyzw:60036] AH01102:从远程服务器 domain.com:443 读取状态行时出错,引用者:https ://example.com/myapp /?key=88

对于我要实现的目标,什么是合适的配置?

标签: apachetomcatwebsocket

解决方案


推荐阅读