我试图弄清楚如何正确地为后端CherryPy服务器设置Apache重定向规则,该服务器实现了websocket (通过ws4py模块完成)。问题是,如果您使用重写引擎或代理程序,它会在重定向请求中删除升级头,因此CherryPy服务器会抱怨它,并在握手步骤中失败。
下面是我的场景。我有CherryPy服务器和ws4py模块,它设置了WebSockets。它运行在localhost:9000上。我想要apache前端,它只是将传入的请求重定向到后端服务器(它所做的还不止这些,但为了简单起见,它应该这样做)。
我的apache规则很简单
RewriteRule ^(/websocket(/.*)?)$ http://some_host:9000$1 [P,L]因此,对于从/websocket开始的所有请求,它都会将它们重定向到运行在端口9000上的后端服务器。P标志代表代理,L停止重写过程(参见http://borkweb.com/story/apache-rewrite-cheatsheet)
如果客户端发送带有header Upgrade:websocket的请求,则apache (重写模块)将其剥离,这将导致WebSocket握手失败。
是否有任何方法来修正重写规则以允许出现升级头?
发布于 2012-08-24 16:31:15
不幸的是,Apache还没有能力逆转代理WebSocket连接(绝对应该如此!)但是有一种解决方案,允许使用Apache和WebSocket连接来处理web请求。这个解决方案包括使用HAProxy作为apache和WebSocket服务器的前端。
下面是几个相关的链接,让您开始:
https://stackoverflow.com/questions/12064882
复制相似问题