haproxy虚拟主机问题

这个configuration是为了把人们发送给Node,除非它是一个.gif,.jpg等等,但是它似乎不工作(它总是把它们发送给Nginx):

frontend all 0.0.0.0:80 timeout client 86400000 # ... unless they're on websockets, which Nginx can't handle acl is_websocket hdr(Upgrade) -i WebSocket acl is_websocket hdr_beg(Host) -i ws # static assets acl url_static path_end .jpg .jpeg .gif .png .ico .pdf .js .css .flv .swf acl is_domain hdr_end(host) -i SUB.DOMAIN.com # ... or are using Socket.io, which is served by node acl is_websocket path_beg /socket.io # conditional for hitting node use_backend node_backend if !url_static is_domain use_backend nginx_backend if url_static # always send people to nginx default_backend nginx_backend 

这是haproxy 1.4。

编辑:我应该指出,我正在提供静态资产与Node.js相同的域名,但通过Nginx。 所以两种情况下的主机名都是一样的,我只是想将静态资源的请求转发给Nginx。

如何如何

http://anismiles.wordpress.com/2011/01/25/websocket-and-node-js-why-shud%E2%80%99ya-care/您可以尝试使用标题升级和连接

  # if header Upgrade = WebSocket and Connection=Upgrader acl is_websocket hdr(Upgrade) -i WebSocket AND hdr(Connection) -i Upgrade use_backend node_backend if is_websocket # else default_backend nginx_backend 

我通过在后端添加option httpclose解决这个问题。 似乎隐含的连接是在Nginx结束。 我在这里find了答案的线索 。

 backend node_backend # node.js option forwardfor # This sets X-Forwarded-For option httpclose # .. etc .. backend nginx_backend # nginx option forwardfor option httpclose # .. etc ..