标签: haproxy

haproxy + stunnel + 保持活动状态?

我想在 haproxy 1.4 前面放置 stunnel 来处理 HTTPS 流量。我还需要 stunnel 添加X-Forwarded-For标头。这可以通过 haproxy 网站上的“stunnel-4.xx-xforwarded-for.diff”补丁来实现。

但是,描述中提到:

请注意,此补丁不适用于 keep-alive,...

我的问题是:这对我来说在实践中意味着什么?我不确定,

  1. 如果这是关于保持活动之间的
    • 客户端和 stunnel
    • stunnel 和 haproxy
    • 或haproxy 和后端服务器?
  2. 这对性能意味着什么:如果我在网页上有 100 个图标,浏览器是否必须协商 100 个完整的 SSL 连接,或者它可以重新使用 SSL 连接,只是创建新的 TCP 连接?

ssl https tcp haproxy stunnel

10
推荐指数
2
解决办法
8713
查看次数

HAProxy 健康检查:使用 httpchk 并观察?

我正在使用具有以下后端配置的 HAProxy 1.4.18

backend staging
  option httpchk HEAD /check.txt HTTP/1.0
  http-check disable-on-404
  default-server error-limit 1 on-error mark-down
  server staging01 x.x.x.x:80 check observe layer7
  server staging02 x.x.x.x:80 check observe layer7
Run Code Online (Sandbox Code Playgroud)

服务器在 apache/passenger 上运行多个应用程序。

httpchk 和 disable-on-404 的组合允许从 lb 中轻松关闭和删除服务器,同时仍然能够直接访问(即用于测试)。

我正在尝试设置观察以便在应用程序不工作时禁用服务器。我破坏了 staging02 上的应用程序配置,所以它总是返回 500。它在第一个 500 之后被正确标记为 DOWN,但在下一个 httpchk 被标记为 UP。

这是日志文件:

Server staging/staging02 is DOWN, reason: Health analyze, info: "Detected 1 consecutive errors, last one was: Wrong http response". 1 active and 1 backup servers left. 2 sessions active, 0 requeued, 0 …
Run Code Online (Sandbox Code Playgroud)

haproxy

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

HAProxy 配置文件中的主机名

我的 haproxy.cfg 文件有两个使用主机名的后端服务器:

server ops-ca-revealv2e-prod-1 ops-ca-revealv2e-prod-1:443 cookie ops-ca-revealv2e-prod-1 ssl weight 1 maxconn 512 check

server ops-ca-revealv2e-prod-2 ops-ca-revealv2e-prod-2:443 cookie ops-ca-revealv2e-prod-2 ssl weight 1 maxconn 512 check
Run Code Online (Sandbox Code Playgroud)

这些主机名是 Amazon OpsWorks 的一部分,并且会在实例启动或关闭时自动注入 /etc/hosts。如果我在其中一个实例关闭时尝试重新启动 HAProxy,则会收到错误消息:

[ALERT] 362/225440 (27202) : parsing [/opt/haproxy-ssl/haproxy.cfg:42] : 'server ops-ca-revealv2e-prod-2' : invalid address: 'ops-ca-revealv2e-prod-2' in 'ops-ca-revealv2e-prod-2:443'
[ALERT] 362/225440 (27202) : Error(s) found in configuration file : /opt/haproxy-ssl/haproxy.cfg
[ALERT] 362/225440 (27202) : Fatal errors found in configuration.
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉 HAProxy 检查主机名是否有效?如果有效,则使用它,如果无效,则忽略它。

load-balancing hosts hostname haproxy

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

使用 haproxy 将多个子域定向到单个后端

我正在使用 haproxy 为在单个服务器上运行的多个应用程序直接路由。对于正在使用的域之一,有几十个子域应该指向少数应用程序之一。

目前,我在单独的一行中列出了所有这些子域。我的前端配置如下所示:

frontend http-in
    bind *:80

    acl alpha     hdr(host) -i alpha.com
    acl beta      hdr(host) -i beta.com
    acl gamma00   hdr(host) -i apple.gamma.com
    acl gamma01   hdr(host) -i banana.gamma.com
    acl gamma02   hdr(host) -i cherry.gamma.com
    acl gamma03   hdr(host) -i durian.gamma.com
    acl gamma04   hdr(host) -i elderberry.gamma.com
    acl gamma05   hdr(host) -i fig.gamma.com
    acl gamma06   hdr(host) -i grapefruit.gamma.com
    acl gamma     hdr(host) -i gamma.com

    use_backend a if alpha
    use_backend b if beta
    use_backend sub1 if gamma00
    use_backend sub1 if gamma01
    use_backend sub1 if gamma02
    use_backend sub2 …
Run Code Online (Sandbox Code Playgroud)

proxy load-balancing haproxy

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

HAproxy 503 Service Unavailable 没有可用的服务器来处理这个请求

我是这种负载平衡方案的新手,我的任务是弄清楚如何使这种负载平衡起作用。

我的环境:

Centos 6.4 64 Bit
Webserver: Lighttpd
All running in ESXI
virtual IP: 192.168.1.6
LB1: 192.168.1.4
LB2: 192.168.1.5
Webserver 1: 192.168.1.12
Webserver 2: 192.168.1.13
Gateway: 192.168.1.1
Run Code Online (Sandbox Code Playgroud)

尝试在使用 HAproxy 和 keepalived 生产之前在实验室中运行测试。这是我的 keepalived 设置:

!keepalived的配置文件

global_defs {
   notification_email {
     myemail@gmail.com
   }
   notification_email_from keepalived@domain.local
   smtp_server 192.168.1.4
   smtp_connect_timeout 30
   router_id 192.168.1.1
}

vrrp_script chk_haproxy {
script "killall -0 haproxy"
interval 1                     # check every second
weight 2                       # add 2 points of prio if OK
}

vrrp_instance VI_1 {
    state MASTER
    interface …
Run Code Online (Sandbox Code Playgroud)

load-balancing lighttpd haproxy keepalived centos6.4

9
推荐指数
2
解决办法
10万
查看次数

为超过 64k 个 websocket 扩展 HAProxy

我们正在尝试设计一种能够处理超过 64k 个 websocket 的架构。

我们首先尝试使用 Amazon ELB,但它的设计不允许意外的流量激增或 websocket。(TCP 模式意外超时 websockets)

使用 HAProxy,这些限制不适用,但我们将被限制在 HA 和后端服务器之间维护的 ~64k websockets。

想到的多种解决方案:

  • 多个 HAProxy 实例,使用 DNS 进行负载均衡(Route53 有一个加权选项)
  • 两个带有 Keepalived 的 HAProxy 实例,多个内部 IP 地址(不确定是否可行)

有一个更好的方法吗 ?

domain-name-system scalability load-balancing haproxy websocket

9
推荐指数
1
解决办法
1702
查看次数

通过主机名代理 TCP

我的单个主机上有多个游戏服务器 TCP 端口。目标是让用户能够连接到 server1.domain.net 并根据该子域进行定向。我的第一直觉写了以下内容,但后来我意识到 TCP 流量不会有任何要读取的标头。使用 HAProxy 1.5.8。我尝试使用多个后端、use_backend 和完整的 ACL 行做同样的事情,但得到了相同的结果(可以理解)。

listen game-listener
  bind x.x.x.x:22222
  mode  tcp
  use-server  server1 if { hdr(host) -i server1.domain.net }
  use-server  server2 if { hdr(host) -i server2.domain.net }
  server server1 localhost:22201 check
  server server2 localhost:22202 check
Run Code Online (Sandbox Code Playgroud)

是否有像 hdr(host) 这样的检查可以用于 TCP 连接?还是我做得对,而游戏玩得不好?

谢谢!

tcp access-control-list haproxy gameserver

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

Haproxy - 超时 http 请求 vs 超时 http-keep-alive vs 超时服务器

我正在努力思考 haproxy 选项的方式

timeout http-request <timeout>
timeout http-keep-alive <timeout>
timeout server <timeout>
Run Code Online (Sandbox Code Playgroud)

彼此互动。我在位于 haproxy 负载均衡器后面的两个应用服务器上运行一个 Apache 网站。现在我没有启用 keep-alive,但我一直在尝试启用它,因为我认为它有助于优化网站。我的目标是为浏览器和 haproxy 之间的连接启用 keep-alive,但禁用 haproxy 和 apache 之间的 keep-alive。我用

option http-server-close
Run Code Online (Sandbox Code Playgroud)

现在我正在研究设置保持活动超时。我一直在研究超时 http-request 选项、超时 http-keep-alive 选项和超时服务器选项的haproxy 手册。如果我正确理解手册,超时 http-keep-alive 是在新请求之间保持连接打开的时间,超时 http-request 是在关闭连接之前等待响应标头的时间。但我似乎无法弄清楚的是超时服务器规定的内容。我想说超时服务器是等待完整响应的时间,但有人可以确认吗?如果我是对的,超时服务器是等待完整响应的时间,那么我是否正确,它不应该对保持活动超时设置有任何影响?

这是我正在修改的 haproxy 配置:

global
    maxconn 4096
    pidfile /var/run/haproxy.pid
    daemon

defaults
    mode http
    retries 3
    option redispatch
    maxconn 5000        
    timeout connect 5000
    timeout client 300000
    timeout server 300000        

listen HTTP *:80
    mode http
    cookie HTTP insert nocache
    balance roundrobin   
    #option httpclose …
Run Code Online (Sandbox Code Playgroud)

timeout haproxy keepalive keep-alive apache-2.2

9
推荐指数
1
解决办法
3万
查看次数

HAProxy URL 重写 40​​4 错误

当第一个缺少文件时,如何使 HAProxy 重写到不同的后端?我需要的是errorloc进行重写而不是重定向,因此客户端不知道重定向。

我们开发了一个考虑到 NginX 的应用程序,它既是负载平衡反向代理,也是静态文件的 Web 服务器。应用程序基于Opa框架,该框架需要基于 cookie 的粘性会话 - NginX 和 HAproxy 都支持。我们遇到问题的应用程序功能是动态内容生成。它按需生成图像,但生成后将其保存在磁盘上,并且可以通过确定性路径静态访问。

问题很容易用 NginX 解决 - 它尝试读取本地文件并仅在文件丢失(尚未生成)时才使用负载平衡后端:

server {
  server_name wkaliszu.pl;
  location /thumb {
    root /path_on_disk/to_cached_content;
    expires 7d;
    # try to access already generated content
    try_files $uri @wkaliszu;
  }
  location / {
    # reverse proxy to the application
    [...]
  }
  location @wkaliszu {
    # reverse proxy to the application
    [...]
  }
}
Run Code Online (Sandbox Code Playgroud)

服务器已迁移,现在使用 HAPproxy 进行负载均衡,它不是 Web 服务器,不支持此功能。现在每次客户端尝试访问资源时都会执行动态软件生成,这样会慢得多并且浪费资源。如果第一个(静态文件的简单缓存 Web 服务器)失败并显示错误 404,如果它可以使用下一个后端就好了,但我找不到一种简单的方法。重定向/thumb到 NginX,它尝试读取静态文件并再次使用新的 …

nginx haproxy

9
推荐指数
1
解决办法
2002
查看次数

如何为多个 SSL 证书配置 HAProxy

我需要使用两个不同的 SSL 证书配置 HAProxy

  1. www.example.com
  2. api.example.com

现在我从关于 serverfault 的帖子(在 Haproxy 中配置多个 SSL 证书)中了解到如何使用 2 个证书,但是服务器继续使用为两个域提到的第一个证书。

配置:

frontend apache-https
    bind 192.168.56.150:443 ssl crt /certs/crt1.pem crt /certs/cert2.pem
    reqadd X-Forwarded-Proto:\ https
    default_backend apache-http

backend apache-http
    redirect scheme https if { hdr(Host) -i www.example.com } !{ ssl_fc }
    redirect scheme https if { hdr(Host) -i api.example.com } !{ ssl_fc }
    ...
Run Code Online (Sandbox Code Playgroud)

如何根据 URL 告诉 HAProxy 使用哪个证书?

完整配置:

global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 …
Run Code Online (Sandbox Code Playgroud)

ssl haproxy ssl-certificate

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