我正在尝试使用 HAProxy 将所有包含 /socket.io/ 路径目录的请求路由到单独的端口。
这是我的配置文件:
global
maxconn 4096 # Total Max Connections. This is dependent on ulimit
nbproc 2
defaults
mode http
frontend all 0.0.0.0:80
timeout client 86400000
default_backend web_servers
acl is_stream path_dir socket.io
use_backend stream_servers if is_stream
backend web_servers
balance roundrobin
option forwardfor # This sets X-Forwarded-For
timeout server 30000
timeout connect 4000
server web1 127.0.0.1:4000 weight 1 maxconn 1024 check
backend stream_servers
balance roundrobin
option forwardfor # This sets X-Forwarded-For
timeout queue 5000
timeout server 86400000
timeout connect 86400000
server stream1 127.0.0.1:5100 weight 1 maxconn 1024 check
在 Chrome 和 Safari 中,带有 /socket.io/ 的 URL 路径可以正确定向到端口 5100。但对于 Firefox 则不行。
我在我的 Mac 上本地运行 Haproxy 进行开发,不确定这是否与此有关。
我正在使用 haproxy 1.4.8 和 Firefox 3.6.15。
我尝试过清除 Firefox 上的缓存,但没有帮助,所以我认为 HAProxy 解析 Firefox 请求标头的方式有问题。
答案1
最有可能的原因是,使用此配置,只会分析连接的第一个请求,而其他请求只会通过隧道传输到服务器。启用日志会显示它。只需将“option http-server-close”添加到您的默认部分,它应该可以工作。啊,请删除“nbproc 2”。它只会使调试复杂化,不会给您带来任何东西。