为了测试所有可能的解决方案以使 Socket.io 与并行 Apache 安装一起工作,我现在安装了监听端口 80 的 HAproxy。它将所有内容代理到 Apache,除非主机名等于io.server.com
.
我们有两个 IP 连接到我们的服务器:一个用于 SSL,另一个用于我们拥有的所有非 SSL 子域。我创建了io.server.com
指向该非 SSL IP 地址的子域。但是,会发生以下情况:
- 访问
regular_http.server.com
导致 Apache 处理该子域(OK) - 访问
io.server.com
结果“Welcome to Socket.io”(OK) - 下次访问
regular_http.example.com
结果“欢迎使用 Socket.io”
为什么 HAproxy 从未配置为转到 Socket.io 的子域向 Socket.io 发送请求?是的,两个子域共享IP,但是HAproxy真的代理了一个下的整个IP吗?那么基于主机名设置 ACL 有什么意义呢?
这是我的配置:
global
daemon
maxconn 4096
user haproxy
group haproxy
defaults
log global
#this frontend interface receives the incoming http requests
frontend http-in
mode http
bind *:80
timeout client 86400000
#default behavior sends the requests to apache
default_backend www_backend
#when "io.test.tld" is matched, an acl I call arbitrarily
# "websocket" triggers
acl websocket hdr_end(host) -i io.server.com
use_backend node_backend if websocket
谢谢!