我正在试图弄清楚如何正确设置实现websocket的后端CherryPy服务器的apache重定向规则(通过ws4py模块完成)。问题是,如果您使用重写引擎或代理通过,它会在重定向的请求中剥离升级标头,因此CherryPy服务器会对其进行投诉并在握手步骤中失败。
我的情景如下。我有带有ws4py模块的CherryPy服务器,可以设置WebSockets。它运行在localhost:9000上。我想要apache前端只是将传入的请求重定向到后端服务器(它做的不止于此,但为了简单起见,它应该这样做。)
我的apache规则很简单
RewriteRule ^(/websocket(/.*)?)$ http://some_host:9000$1 [P,L]
因此对于以/ websocket开头的所有请求,它将它们重定向到在端口9000上运行的后端服务器.P标志代表Proxy,L停止重写过程(参见http://borkweb.com/story/apache-rewrite-cheatsheet)
如果客户端使用HTTP标头升级:websocket 发送请求,则apache引擎(重写模块)会将其剥离,导致WebSocket握手失败。
有没有办法修改重写规则以允许升级标题?
答案 0 :(得分:2)
不幸的是,Apache还没有能力反向代理WebSocket连接(绝对应该!)。但是有一种解决方案允许使用Apache和WebSocket连接处理Web请求,以便通过其他方式处理。此解决方案涉及使用HAProxy作为apache和WebSocket服务器的前端。
以下是一些相关链接,可帮助您入门: