使用WebSocket的后端服务器的Apache重定向规则

使用WebSocket的后端服务器的Apache重定向规则,apache,mod-rewrite,redirect,websocket,cherrypy,Apache,Mod Rewrite,Redirect,Websocket,Cherrypy,我试图弄清楚如何为实现websocket的后端CherryPy服务器正确设置apache重定向规则(通过ws4py模块完成)。问题是,如果您使用重写引擎或proxypass,它会剥离重定向请求中的升级头,因此CherryPy服务器会对此进行投诉,并在握手步骤失败 我的情况如下。我有CherryPy服务器和ws4py模块,用于设置WebSocket。它在localhost:9000上运行。我希望有一个apache前端,它可以将传入的请求重定向到后端服务器(它可以做更多的事情,但为了简单起见,它应该

我试图弄清楚如何为实现websocket的后端CherryPy服务器正确设置apache重定向规则(通过ws4py模块完成)。问题是,如果您使用重写引擎或proxypass,它会剥离重定向请求中的升级头,因此CherryPy服务器会对此进行投诉,并在握手步骤失败

我的情况如下。我有CherryPy服务器和ws4py模块,用于设置WebSocket。它在localhost:9000上运行。我希望有一个apache前端,它可以将传入的请求重定向到后端服务器(它可以做更多的事情,但为了简单起见,它应该做到这一点)

我的apache规则很简单

RewriteRule ^(/websocket(/.*)?)$ http://some_host:9000$1 [P,L]
因此,对于以/websocket开头的所有请求,它会将它们重定向到端口9000上运行的后端服务器。P标志代表代理,L停止重写过程(请参阅)

如果客户端发送带有HTTP头的请求,则升级:websocketapache引擎(重写模块)会将其剥离,从而导致websocket握手失败


有没有办法修复重写规则以允许出现升级头?

不幸的是,Apache还没有反转代理WebSocket连接的功能(它绝对应该!)。但是有一种解决方案允许使用Apache处理web请求,而WebSocket连接可以由其他东西处理。此解决方案包括使用HAProxy作为apache和WebSocket服务器的前端

以下是一些相关链接,可以帮助您入门:


你说的是重定向,但你实际上是在代理。由于它是代理的,升级:websocket被传递意味着Apache希望将websocket与后端系统进行通信,但它不准备在代理ws请求的同时使用Apache 2.4?是的,它现在可以工作了