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



我正在使用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)

当通过HTTP连接器直接访问Tomcat时,这是有效的。如果AJP不支持这一点,是否有解决方法?

使用Apache模块mod_proxy_wstunnel:

sudo a2enmod mod_proxy_wstunnel

然后使用它让WebSocket连接通过添加到apache.conf:

ProxyPass "/ws2/"  "ws://localhost:8180/ws"

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

最新更新