标签: haproxy

我可以通过身份验证与HAProxy和socket.io进行粘性会话吗?

我有几个socket.io实例,在HAProxy下运行身份验证,我需要强制认证请求和套接字连接转到同一个实例.我已根据对SO问题的答案设置了HAProxy,并进行了一些修改,如下所示:

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 www_backend
    acl is_websocket hdr(Upgrade) -i WebSocket
    acl is_websocket hdr_beg(Host) -i ws

    use_backend socket_backend if is_websocket

backend www_backend
    balance url_param sessionId
    option forwardfor # This sets X-Forwarded-For
    timeout server 30000
    timeout connect 4000
    server server1 localhost:8081 weight 1 maxconn 1024 check
    server server2 localhost:8082 weight 1 maxconn 1024 check
    server server3 localhost:8083 …
Run Code Online (Sandbox Code Playgroud)

load-balancing haproxy node.js socket.io

5
推荐指数
2
解决办法
7673
查看次数

nginx,node.js和socket.io - 有工作婚姻吗?

nginx 是一个杀手级静态文件服务器.

它可以服务node.js,如在这个例子中,但是以有限的方式.

但nginx是显然无法给代理websockets.

我发现可能有用的唯一方法就是按照本文使用HAProxy前端- 但它是从2011年10月6日开始的.

这必须是一个常见问题,但我找不到一个非常常见的解决方案.


解

(有关完整的解决方案和详细信息,请参阅https://github.com/bangkok-maco/barebone-node)

ip测试架构:

  • 127.0.0.12 - www.chat.nit - public,在/ etc/hosts和haproxy中
  • 127.0.1.12 - 内部nginx Web服务器
  • 127.0.2.12 - 内部聊天服务node.js socket.io

/etc/haproxy/haproxy.cfg:

global
 maxconn 4096
 nbproc 2
 daemon
 # user nobody
 log             127.0.0.1       local1 notice

defaults
 mode http

# listen on 127.0.0.12:80
frontend app
 bind 127.0.0.12:80
 mode tcp
 timeout client 86400000
 default_backend www_backend
 acl is_chat hdr_dom(Host) chat …
Run Code Online (Sandbox Code Playgroud)

nginx haproxy websocket node.js socket.io

5
推荐指数
1
解决办法
3764
查看次数

502 Bad Gateway HAproxy

我有Ubuntu 12.04LTS在运行.我的网络服务器是Tomcat 7.0.42,我使用HAProxy作为代理服务器.我的应用程序是一个使用websockets的servlet应用程序.

有时当我请求我的页面时,我会在某些资源上出现"502 Bad Gateway"错误,而不是一些资源.我认为这与我的HAProxy配置有关,如下所示:

global
    maxconn     4096 # Total Max Connections. This is dependent on ulimit
    nbproc      1

defaults
    mode        http
    option  http-server-close
    option httpclose
#   option  redispatch
    no option checkcache  # test against 502 error

frontend all 0.0.0.0:80
    timeout client 86400000
    default_backend www_backend
    acl is_websocket hdr(Upgrade) -i WebSocket
    acl is_websocket hdr_beg(Host) -i ws

    use_backend socket_backend if is_websocket

    backend www_backend
        balance roundrobin
        option forwardfor # This sets X-Forwarded-For
        timeout server 30000
        timeout connect 4000
        server apiserver localhost:8080 weight …
Run Code Online (Sandbox Code Playgroud)

linux ubuntu proxy tomcat haproxy

5
推荐指数
1
解决办法
2万
查看次数

Openshift Layer4连接,App无法启动

我最近将一组node.js更改推送到Openshift上的应用程序.该应用程序在我的本地计算机上运行良好,非常接近Openshift部署的vanilla示例.Openshift haproxy日志有这个最后一行:

[fbaradar-hydrasale.rhcloud.com日志]> [警告] 169/002631(93881):服务器快递/本地齿轮是DOWN,原因:Layer4连接问题,信息: "连接被拒绝",检查持续时间:0毫秒.剩下0个活动服务器和0个备份服 0个会话处于活动状态,0个队列正在运行,0个队列正在运行

nodejs.log具有此最后一行,并且在此行之前没有错误消息: DEBUG: Program node server.js exited with code 8

我搜索了高低,似乎找不到任何有类似问题的人或提示如何解决这个问题.显然,上述结果在尝试通过Web访问应用程序时,503服务不可用.

haproxy node.js openshift

5
推荐指数
1
解决办法
3047
查看次数

结合HAProxy统计数据?

我有两个HAProxy实例.两个实例都启用了统计信息并且工作正常.

我试图将两个实例的统计数据合并为一个,以便我可以使用单个HAProxy来查看前/后端统计信息.我试图在两个haproxy实例的同一端口上使用stats监听器,但这不起作用.我已尝试使用套接字接口,但这仅报告其中一个接口.

有任何想法吗?

我的一个haproxy配置文件如下所示:

global
    daemon
    maxconn 256
    log 127.0.0.1 local0 debug
    log-tag haproxy
    stats socket /tmp/haproxy

defaults
    log global
    mode http
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms

frontend http-in
    bind *:8000
    default_backend servers
    log global
    option httplog clf

backend servers
    balance roundrobin
    server ws8001 localhost:8001
    server ws8002 localhost:8002
    log global

listen admin
    bind *:7000
    stats enable
    stats uri /
Run Code Online (Sandbox Code Playgroud)

除了前/后端服务器IP不同之外,其他haproxy配置是相同的.

haproxy

5
推荐指数
2
解决办法
9087
查看次数

如何在CoreOS中加载平衡服务?

  • 我有一个运行3个web conntainers的coreos集群,每个集合运行相同的Web应用程序.
  • 如何使用haproxy和nginx将我的请求与这些正在运行的容器进行负载均衡.
  • 请建议.

nginx haproxy docker coreos

5
推荐指数
1
解决办法
3412
查看次数

棘轮多个服务器

我在我的PHP应用程序中将Ratchet(http://socketo.me/)用于websockets。我有多个运行该应用程序的虚拟机,每个虚拟机还托管websocket服务。通过HAProxy将请求传递到这些虚拟机之一。同样,当前用户还在为应用程序连接的同一节点上使用websocket服务。

现在我与websocket服务器互相讨论有问题。例如:

  • 用户1连接到节点1,用户2连接到节点2
  • User1通过websocket向用户2发送websocket消息
  • User2从未收到此消息,因为他已连接到另一个节点

进行此类消息传递的良好实践是什么?我有一些想法,但不确定该怎么走:

  1. 每个客户端都连接到每个websocket节点。
  2. 服务器也将消息发布到所有其他节点
  3. 使用数据库在节点之间同步消息

如果将新节点连接到云,则第一个和第二个选项的伸缩性都不太好。第三个选项将导致一些滞后,因为有必要检查来自其他节点的消息是否在数据库循环中。

还有其他选择来处理这种情况吗?感谢您的回答!

php haproxy ratchet

5
推荐指数
1
解决办法
639
查看次数

Haproxy SNI与HTTP主机ACL检查性能

我有一个HAproxy 1.5设置,可以在几个Web服务器前卸载SSL(这样,它们只处理HTTP)

我的SSL证书是通配符,我们根据FQDN平衡不同的后端.

我的前端配置如下所示:

...
frontend my-frontend
    bind            ip:443 ssl crt /var/etc/haproxy/wildcard_cert.pem  
    mode            http
    log             global
    option          httplog
    option          forwardfor

    use_backend     my-backend      if { ssl_fc_sni my.domain.org }
    use_backend     my-backend2     if { ssl_fc_sni my2.domain.org }

    acl             is-domain   hdr(host) -i my.domain.org
    acl             is-domain2  hdr(host) -i my2.domain.org
    use_backend     my-backend if is-domain
    use_backend     my-backend2 if is-domain2
...
Run Code Online (Sandbox Code Playgroud)

特殊选项ssl_fc_sni可用于SSL卸载以访问SNI值(其中选项req_ssl_sni适用于SSL传递)

http://cbonte.github.io/haproxy-dconv/configuration-1.5.html#ssl_fc_sni

我想知道ssl_fc_sni是否比HTTP Header提取ACL执行得更快?HAProxy是否有机会在读取HTTP内容之前提取SNI值并使用它,提取Host:Header并计算我的第二个ACL?

或者性能是一样的?

谢谢,

performance ssl haproxy

5
推荐指数
1
解决办法
5510
查看次数

具有多个SSL的HAProxy选择错误的证书

我遇到问题,有时HaProxy选择错误的SSL证书。场景是这样,我有3个域:

domain1.com
domain2.com
domain3.com
Run Code Online (Sandbox Code Playgroud)

每个域都使用同一个后端,所有SSL终止都发生在负载平衡器上。另外,每个域在指定的pem文件夹中都有其pem文件。

有时domain2.com会尝试使用domain1.com证书,其他域也是如此。一个简单的刷新就可以修复它,但是不可以。这是我的配置:

global
   log /dev/log local0
   log /dev/log local1 notice
   chroot /var/lib/haproxy
   stats socket /run/haproxy/admin.sock mode 660 level admin
   stats timeout 30s
   user haproxy
   group haproxy
   daemon
   maxconn 10048
   tune.ssl.default-dh-param 2048

defaults
   log global
   mode http
   option forwardfor
   option http-server-close
   option httplog
   option dontlognull
   timeout connect 5000
   timeout client 2000000
   timeout server 2000000

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   reqadd X-Forwarded-Proto:\ http
   default_backend http_back

frontend www-https
  bind *:443 ssl crt /etc/ssl/pems/ #All PEMs here, in …
Run Code Online (Sandbox Code Playgroud)

ssl load-balancing haproxy

5
推荐指数
0
解决办法
579
查看次数

X-Forwarded-Proto https在前端或后端(HAProxy)?

我在后端服务器应用程序前面设置了HAProxy以启用HTTPS.我已经读过我需要设置的内容X-Forward-Proto https.

在haproxy.cfg文件中,我尝试在前端执行以下操作:

frontend haproxy
  bind :8443 ssl crt frontend/server.pem
  reqadd X-Forwarded-Proto:\ https
  default_backend my-backend
Run Code Online (Sandbox Code Playgroud)

这似乎使它工作 - 例如,我可以登录到我的后端服务器并导航到不同的页面.如果我没有proto选项,我只能登录但不能导航到任何其他页面.

现在我在后端添加选项(从前端删除):

backend my-backend
  http-request add-header X-Forwarded-Proto https if { ssl_fc }
  server my-backend 127.0.0.1:9000
Run Code Online (Sandbox Code Playgroud)

它也有效,我可以导航我的后端服务器应用程序中的不同页面.

那么这是正确的方法呢?在前端或后端还是没关系?

https haproxy

5
推荐指数
1
解决办法
5440
查看次数