通过Apache和Tomcat的WebSockets:AJP协议不支持HTTP升级

Nic*_*don 7 apache tomcat ajp websocket

我正在使用WebSockets进行开发,并在Tomcat 8上运行了一个正在运行的Web应用程序.但是,当在它前面测试Apache 2时,客户端正在获取HTTP 500并且Tomcat日志说:

 java.lang.UnsupportedOperationException: HTTP upgrade is not supported by the AJP protocol
    at org.apache.coyote.ajp.AbstractAjpProcessor.action(AbstractAjpProcessor.java:587)
    at org.apache.coyote.Request.action(Request.java:379)
    at org.apache.catalina.connector.Request.upgrade(Request.java:1886)
    at org.apache.catalina.connector.RequestFacade.upgrade(RequestFacade.java:1114)
    at org.apache.tomcat.websocket.server.UpgradeUtil.doUpgrade(UpgradeUtil.java:231)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:77)
Run Code Online (Sandbox Code Playgroud)

这在通过其HTTP连接器直接访问Tomcat时起作用.如果AJP不支持此功能,是否有解决方法?

Nic*_*don 4

使用 Apache 模块mod_proxy_wstunnel

sudo a2enmod mod_proxy_wstunnel
Run Code Online (Sandbox Code Playgroud)

然后使用它来让 WebSocket 连接通过,方法是将其添加到apache.conf

ProxyPass "/ws2/"  "ws://localhost:8180/ws"
Run Code Online (Sandbox Code Playgroud)

并确保您已通过使用<Connector protocol="HTTP/1.1" port="8180" ...>in在 Tomcat 中启用了 HTTP 连接器server.xml

  • 它是 sudo a2enmod proxy_wstunnel,没有“mod_”,在 apache 2.4.7 中 (5认同)