- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用最新的 Chrome 浏览器,我尝试使用 sockjs
客户端与 haproxy
后面的后端服务器进行通信。在我的本地主机上(中间没有 haproxy
),这工作正常 - 客户端可以使用 websocket
协议(protocol)连接、发送和接收消息。例如:
conn.onopen = function() {
if (conn.readyState === SockJS.OPEN) {
conn.send("hello server");
console.log("msg sent");
}
};
一旦我使用 HAProxy
将其部署到服务器上,奇怪的事情就会发生,sockjs
认为连接已打开(如 conn.readyState === SockJS .OPEN
和“消息已发送”出现在控制台日志中),但是,websocket
握手只是挂起,服务器永远不会收到消息。以下是我在 haproxy
日志中看到的内容:
Oct 23 09:08:25 localhost.localdomain haproxy[14121]: 129.xx.xxx.105:55000 [23/Oct/2012:09:08:24.459] public www/content 777/0/0/1/778 200 375 - - ---- 3/3/0/1/0 0/0 "GET /sockjs/info HTTP/1.1"
Oct 23 09:10:54 localhost.localdomain haproxy[14121]: 129.xx.xxx.105:55015 [23/Oct/2012:09:08:25.398] public www/content 0/0/0/1/149017 101 147 - - CD-- 4/4/0/0/0 0/0 "GET /sockjs/478/kyi342s8/websocket HTTP/1.1"
请注意,第二条日志消息仅在我关闭 haproxy
后面的后端服务器时出现。关闭之前,日志中没有错误,但 websocket 握手未完成,服务器没有收到任何消息。
使用 Chrome 的开发者工具,在“网络”选项卡中,我看到以下内容:
Request URL:ws://www.mysite.com/sockjs/478/kyi342s8/websocket
Request Method:GET
Status Code:101 Switching Protocols
Request Headers
Connection:Upgrade
Host:www.mysite.com
Origin:http://www.mysite.com
Sec-WebSocket-Extensions:x-webkit-deflate-frame
Sec-WebSocket-Key:TFEIKYhlqWWBZKlXzXAuWQ==
Sec-WebSocket-Version:13
Upgrade:websocket
(Key3):00:00:00:00:00:00:00:00
Response Headers
Connection:Upgrade
Sec-WebSocket-Accept:D+s3va02KH6QTso24ywcdxcfDgM=
Upgrade:websocket
(Challenge Response):00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
并且 websocket
对象的“类型”和“时间延迟”在开发者工具的网络选项卡下均显示“待处理”。
最后,这是我的 haproxy
配置(版本 1.4.22):
global
log 127.0.0.1 local1 info
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
chroot /usr/share/haproxy
uid 99
gid 99
daemon
#debug
#quiet
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 500
timeout connect 6s
frontend public
mode http
bind *:80
timeout client 300s
option http-server-close
#option http-pretend-keepalive
# define ACLs
acl host_static hdr_beg(host) -i static. data.
acl host_www hdr_beg(host) -i www.
acl url_static path_end .ico .txt .pdf .png .jpg .css .js .csv
acl is_stats path_beg /haproxy/stats
# define rules
use_backend nginx if host_static or host_www url_static
use_backend stats if is_stats
default_backend www
backend nginx
timeout server 20s
server nginx 127.0.0.1:8484
backend stats
stats enable
stats uri /haproxy/stats
backend www
timeout server 300s
option forwardfor
#no option httpclose
option http-server-close
server sockcontent 127.0.0.1:8080
有谁知道为什么会这样吗?是否是由于某些 haproxy
配置,甚至是服务器的某些常规网络设置(例如 iptables
)?
附注我尝试在 haproxy
中启用 http-pretend-keepalive
,但它不起作用。
最佳答案
就像@Joes所说,这是防火墙行为不当的错误。有人说 FortiGate 等原因导致了这种情况。
更多讨论:https://github.com/sockjs/sockjs-client/issues/94
通过 SSL 提供 SockJS 似乎可以解决这个问题。
关于Websocket 握手与 HAProxy 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13032005/
我只是看了一下HAproxy的源码来了解它是如何实现的,我看到了一个有趣的数据结构,叫做Elastic Binary Search tree .它似乎与二叉搜索树非常相似。但我想知道为负载均衡器选择这
我正在 AWS 上部署 NodeJS 应用程序。目前的结构是 ELB 1 个 HAProxy 实例 2+ 个运行 NodeJS 应用程序的 EC2 实例 Single HA Proxy 实例确保
更改配置文件时,我使用以下命令重启 HAProxy: /usr/local/sbin/haproxy -f /etc/haproxy.cfg -p /var/run/haproxy.pid -sf $
我有两个 HAProxy 实例。两个实例都启用了统计信息并且工作正常。 我正在尝试将两个实例的统计信息合并为一个,以便我可以使用单个 HAProxy 来查看前端/后端统计信息。我试图让两个 hapro
在重新启动 HAProxy 服务之前,有什么方法可以验证 HAProxy haproxy.cfg 文件吗?例如:较大的 haproxy.cfg 文件中可能存在小的拼写/语法错误。我搜索了多个论坛,但找
我希望在 HAProxy 中有一个限制规则,限制用户加载任何特定路径的速率,但我不知道在 HAProxy 中连接字符串的方法(至少在生成棍子 table 的 key )。所以我想要的是 tcp-req
我正在构建一个具有多个前端和后端的 haproxy 配置文件。它将有数百行长,我宁愿将其分成单独的文件,用于我想要负载平衡的每个不同网站。 HAProxy 是否提供从主 haproxy.cfg 文件链
我正在使用以下命令启动 HA 代理: sudo etc/init.d/haproxy start 我使用以下方法停止 HA 代理: sudo etc/init.d/haproxy stop 我如何为
我使用 haproxy 和 stunnel 处理 SSL(并使用代理模式来保留 haproxy 的原始 IP)。 我有几个 acl 测试,根据域、 header 或路径重定向到不同的后端。 问题是,无
我看到系统日志中弹出这些消息: Mar 10 12:51:35 db1 kernel: [5851729.958138] type=1400 audit(1457614295.823:2925931)
我在 haproxy.cfg 的默认部分有这个选项: option dontlog-normal option dontlognull 但是在日志文件中仍然有这种类型的日志行: localhost
我们使用以下方法将 URL 映射文件加载到 HAProxy 中: http-request redirect location %[capture.req.uri,map(/etc/haproxy/r
我目前正在重构我们在生产服务器上使用的 haproxy 配置,以从中央服务器转发 TCP 流量。目标是让一切都与 docker 容器一起工作,以帮助提高部署可靠性。 到目前为止一切都进展顺利,但现在我
我在我的 HAProxy 统计报告中看到 Sessions Curr、Max、Limit 均为 2000。 如何将最大和限制增加到 2000 以上? 最佳答案 使用maxconn Sets the m
我环顾四周,试图找到一个 HAProxy 匹配 SNI 通配符的示例,我的搜索提出了类似标题但与证书无关的问题。 具体来说,我需要使用 acme/letsencyrpt 为 dvsni 路由 nonc
我们有一个 haproxy 实例,我们的一个应用程序仅支持 TLSv1.0。当它尝试通过此 haproxy 连接时,它会因握手失败而失败。 如何在此 haproxy 实例上启用 TLSv1.0 支持。
如何构建HAPROXY配置文件来阻止特定HTTP方法的请求? 我们开始发现许多攻击使用我们的应用程序不支持的方法。我们宁愿拒绝负载均衡器的流量,也不愿让我们的应用程序陷入困境。 最佳答案 尝试将其放入
我使用 haproxy 1.6.4 作为 TCP(不是 HTTP)代理。我的客户正在发出 TCP 请求。他们不等待任何响应,他们只是发送数据并关闭连接。 当所有后端节点都关闭时,haproxy 的行为
我需要使用先前配置的 HAproxy v1.8 来管理服务器。更新到 v2.4 后,我注意到有关不再使用 regrep 的错误: [ALERT] (1574) : parsing [/etc/h
我们使用 HAProxy 将传入的 TCP 连接转发到使用原始 TCP 的单独服务器。我们看到的问题是客户端连接被接受然后关闭而不是立即被拒绝。由于我们启用了健康检查,HAProxy 有什么方法可以解
我是一名优秀的程序员,十分优秀!