标签: haproxy

为什么 websocket 连接在几秒钟后关闭

好吧,我已经尝试解决这个问题有一段时间了,但没有结果。因此,我们在 aws 负载均衡器后面有一个 aws ec2 实例,并为负载均衡器分配了一个 aws free ssl。在我们的 ec2 实例中,我们有一个 apache Web 服务器侦听端口 1338 和一个 websocket 服务器(使用 Ratchet)侦听端口 8080。在我们之间,我们使用具有此配置的 HAProxy

global
    log     127.0.0.1   local0
    maxconn 10000
    user    haproxy
    group   haproxy
    daemon

defaults
        mode                    http
        log                     global
        option                  httplog
        retries                 3
        backlog                 10000
        timeout client          30s
        timeout connect         30s
        timeout server          30s
        timeout tunnel          3600s
        timeout http-keep-alive 1s
        timeout http-request    15s

frontend public
        bind            *:80
        acl             is_websocket hdr(Upgrade) -i WebSocket
        use_backend     ws if is_websocket #is_websocket_server
        default_backend www

backend ws
    option …
Run Code Online (Sandbox Code Playgroud)

php ssl haproxy amazon-web-services websocket

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

haproxy 日志 - 取决于条件

我正在解决 haproxy 设置上日志格式的一些问题。首先,我有多个代理设置,这意味着:

请求 -> 客户端代理 -> 中间代理 -> 应用程序

关于客户端代理上的这一点,我添加:

唯一 id 标头 X 唯一 ID

该值在日志中表示为:

日志格式 %ci:%cp\ [%t]\ %f\ %b/%s\ %Tq/%Tw/%Tc/%Tr/%Tt\ %ST\ %B\ %CC\ %CS\ %tsc\ %ac/%fc/%bc/%sc/%rc\ %sq/%bq\ {%hrl}\ {%hsl}\ %{+Q}r\ {%ID}

这太棒了。另一方面,在中间代理上,我可以从前端的标头获取此值:

捕获请求标头 X-Unique-ID len 200

现在在这个代理(中间代理)上我有这样的条件:

acl uniq_header_exist hdr_cnt(X-唯一-ID) eq 0

http-request set-header X-Unique-ID %{+X}o\ %ci:%cp_%fi:%fp_%Ts_%rt:%pid 如果 uniq_header_exist

(它完成了这项工作,所以我可以添加 uuid(如果不存在的话) - 很好)并且日志表示如下:

日志格式 %ci:%cp\ [%t]\ %f\ %b/%s\ %Tq/%Tw/%Tc/%Tr/%Tt\ %ST\ %B\ %CC\ %CS\ %tsc\ %ac/%fc/%bc/%sc/%rc\ %sq/%bq\ {%hrl}\ {%hsl}\ %{+Q}r\ [id=%[capture.req.人类发展报告(2)]]

但我无法有任何可能做这样的事情:

if X-Unique-ID exist then use: …
Run Code Online (Sandbox Code Playgroud)

proxy logging haproxy

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

使用 haproxy 第 4 层“连接被拒绝”

我需要一些有关如何设置haproxy 的建议。我有两个网络服务器正在运行。为了进行测试,他们在端口 8080 上运行一个简单的节点服务器。

现在,在我的 haproxy 服务器上,我启动 haproxy,它提供了以下内容:

$> /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg 
[WARNING] 325/202628 (16) : Server node-backend/server-a is DOWN, reason: Layer4 connection problem, info: "Connection refused", check duration: 0ms. 1 active and 0 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue.
[WARNING] 325/202631 (16) : Server node-backend/server-b is DOWN, reason: Layer4 timeout, check duration: 2001ms. 0 active and 0 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue.
[ALERT] 325/202631 …
Run Code Online (Sandbox Code Playgroud)

haproxy

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

带“-k”和不带“-k”的卷曲

curl 当我使用without 打开网址时-k,我的请求正在通过,并且我能够看到预期的结果。

$ curl -vvv https://MYHOSTNAME/wex/archive.info -A SUKU$RANDOM
*   Trying 10.38.202.192...
* Connected to MYHOSTNAME (10.38.202.192) port 443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
* Server certificate: *.MYCNAME
* Server certificate: ProdIssuedCA1
* Server certificate: InternalRootCA
> GET /wex/archive.info HTTP/1.1
> Host: MYHOSTNAME
> User-Agent: SUKU19816
> Accept: */*
> 
< HTTP/1.1 200 OK
< Server: nginx/1.10.2
< Date: Thu, 26 Jan 2017 01:08:40 GMT
< Content-Type: text/html;charset=ISO-8859-1
< Content-Length: 19
< Connection: keep-alive
< Set-Cookie: …
Run Code Online (Sandbox Code Playgroud)

ssl curl nginx haproxy insecure-connection

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

dockerized HAProxy+Keepalived 实现 HA

我有一台主机,HAProxy 使用 docker compose 作为 docker 容器运行。我想水平扩展我们的 HAProxy,使其在多个主机上高度可用。

我读了一些关于 keepalived 的教程,但这是在主机上完成的,并且是作为主机安装的 HAProxy 服务器,而不是在 docker 容器中。

是否可以通过docker化的方式部署高可用的HAProxy?

(我知道我有虚拟化设置)

high-availability haproxy docker

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

如何在多个后端之间共享健康检查?

我有两个后端,以便在我的应用程序中维护两组规则。一种用于通过浏览器访问的主网站(cookied 会话),另一种用于 API(无状态并通过 API 密钥进行身份验证)。

配置看起来像这样(大大简化)。

defaults
    option httpchk HEAD /ping

backend web
    cookie _srv insert indirect
    server srv1 10.0.0.1:80 cookie srv1 check inter 10s
    server srv2 10.0.0.2:80 cookie srv2 check inter 10s

backend api
    stick-table type string len 50 expire 1d store http_req_cnt
    stick on url_param(key)
    server srv1 10.0.0.1:80 check inter 10s
    server srv2 10.0.0.2:80 check inter 10s
Run Code Online (Sandbox Code Playgroud)

如图所示,两个后端使用相同的服务器,只是 API 不需要设置 cookie。有(或将会有)更多的逻辑需要分离,例如速率限制规则。

我的问题是如何避免重复健康检查?对每台服务器对同一端点执行两次 ping 操作会浪费资源。我想让web后端进行健康检查,并将api后端标记为启动或关闭。这可能吗?或者也许有更好的方法来分离后端但保留通用功能。

high-availability haproxy

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

如果 SSL 证书可用,HAProxy 重定向 HTTPS

如果 HAProxy 有可用于提供的域的证书,我想强制使用 TSL/SSL/HTTPS。我可以只提供一个包含域名的列表,但我宁愿动态地提供它,这样我就不必一遍又一遍地更新它。

这是我当前的配置:

frontend public
    acl             has_ssl hdr(host) -i one.nl two.be three.be four.nl five.nl six.com seven.com eight.net nine.com ten.org

    use_backend     www-https if has_ssl
    default_backend www

backend www-https
    redirect scheme https if !{ ssl_fc }
Run Code Online (Sandbox Code Playgroud)

是否有系统变量或其他东西可以检查域名的证书是否可用?

ssl https haproxy tls1.2

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

Haproxy 无法识别新证书

我最近将我的证书更改为 LetsEncrypt 的。

我将新证书放在旧证书的位置:

cat /etc/haproxy/certs/fullchain.pem /etc/haproxy/certs/privkey.pem > /etc/haproxy/certs/mydomain.com.pem
Run Code Online (Sandbox Code Playgroud)

在我的haproxy.cfg我有:

frontend https
bind :::8443 v4v6 ssl crt /etc/haproxy/certs/mydomain.com.pem no-sslv3
Run Code Online (Sandbox Code Playgroud)

然后我运行了,但当我在浏览器中或使用SSLLabssystemctl reload haproxy访问它时,它仍然会带来旧的。

如果我使用curl -kv mydomain.com它会显示正确的证书。

haproxy ssl-certificate lets-encrypt

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

HAProxy,“超时隧道”与“超时客户端/服务器”

配置 HAProxy 时,单独设置“超时隧道”与同时设置“超时客户端”和“超时服务器”(全部设置为相同值)有什么区别?

haproxy session-timeout

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

HAProxy + Keycloak 重定向问题

我有一个 HAProxy 在两台以独立模式运行 Keycloak 的机器前面充当负载均衡器。

版本

  • HAProxy 版本 1.6.3,2015/12/25 发布
  • Keycloak版本2.4.0.Final

HAProxy 配置

global
  user haproxy
  group haproxy
  log /dev/log local0
  log-tag WARDEN
  chroot /var/lib/haproxy
  daemon
  quiet
  stats socket /var/lib/haproxy/stats level admin
  maxconn 256
  pidfile /var/run/haproxy.pid
  tune.bufsize 262144

defaults
  timeout connect 5000ms
  timeout client 5000ms
  timeout server 5000ms
  log global
  mode http
  option httplog
  option dontlognull
  option redispatch
  retries 5
  stats uri /haproxy-status

frontend http-in
  mode http
  bind *:80
  maxconn 2000
  redirect scheme https code 301 if !{ ssl_fc } …
Run Code Online (Sandbox Code Playgroud)

reverse-proxy load-balancing haproxy keycloak

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