标签: haproxy

以编程方式更改 haproxy 配置文件

有没有java程序或api可以改变haproxy的配置文件的内容?例如动态添加/删除一些配置。

java haproxy

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

当 Haproxy 正常重启时,它仍然会向后端服务器调度连接

我们使用 haproxy 在 tcp 模式下进行 thrift(rpc) 服务器负载平衡。但是当后端服务器重新启动时,我们遇到了一个问题。

当我们的 thrift(rpc) 服务器重新启动时,它首先停止侦听 haproxy 配置为连接的端口,但仍会处理正在运行的请求,直到它们全部完成(正常重启)。

因此在重启期间,仍然有客户端通过haproxy到后端服务器建立的连接套接字,而后端服务器不接受任何新连接,但haproxy仍然认为该后端服务器是健康的,并将向该服务器调度新连接。分派到该服务器的任何新连接都将花费相当长的时间来连接,然后超时。

有什么方法可以通知 haproxy 服务器已停止侦听并且不向其分派任何连接吗?

我尝试过以下操作:

  1. timeout connect设置为非常低 + redispatch+retry 3
  2. option tcp-check

两者都不能解决问题。

haproxy

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

haproxy无法加载ssl私钥

我在 centos 7 上使用 haproxy 1.5.2 时遇到问题。我创建了一个包含私钥和自签名证书的 pem 文件,但在配置它时,haproxy 无法启动。

当我按以下顺序获得证书时:

-----BEGIN PRIVATE KEY----
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

Feb 20 14:27:29 test.net haproxy-systemd-wrapper[2217]: [ALERT] 050/142729 (2218) : Proxy 'test': no SSL certificate specified for bind '*:443' at [/etc/haproxy/haproxy.cfg:64] (use 'crt').
Feb 20 14:27:29 test.net haproxy-systemd-wrapper[2217]: [ALERT] 050/142729 (2218) : Fatal errors found in configuration.
Feb 20 14:27:29 test.net haproxy-systemd-wrapper[2217]: haproxy-systemd-wrapper: exit, haproxy RC=256
Feb 20 14:30:11 test.net systemd[1]: Starting HAProxy Load Balancer...
Feb 20 14:30:11 test.net …
Run Code Online (Sandbox Code Playgroud)

ssl haproxy

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

HAProxy动态acl

在 HAProxy 中,是否可以为虚拟主机重定向编写 ACL(适用于所有虚拟主机的一条规则)

例子说

如果标头包含backend-name.domain.com---> 使用带有名称的后端backend-name

它应该像这样工作,

a.domain.com -----> backend a
b.domain.com -----> backend b
Run Code Online (Sandbox Code Playgroud)

无需分别为 a 和 b 明确编写 ACL。

在这里,我需要为所有基于域的路由使用一个 ACL,因为我使用通配符 DNS 将 domain.com 的所有子域解析为 HAProxy IP。

我动态添加和删除后端,很难使用脚本为每个新前端编写 ACL。

提前致谢。

acl haproxy

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

如何通过 HAproxy 访问 Kibana 仪表板

我有一台运行 kibana 的服务器,我已将其设置为从本地主机访问。这是一个 linux 服务器,所以我可以这样做:

 links http://localhost:5601
Run Code Online (Sandbox Code Playgroud)

这运行良好。我需要将此 kibana 服务器置于 HAProxy 之后,它将充当 Kibana 的反向代理。

我的 Haproxy 配置文件(/etc/haproxy/haproxy.cfg)看起来像

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

        # Default SSL material locations
        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private

        # Default ciphers to use on SSL-enabled listening sockets.
        # For more information, see ciphers(1SSL). This list is from:
        #  https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
        ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
        ssl-default-bind-options no-sslv3

defaults
        log     global
        mode …
Run Code Online (Sandbox Code Playgroud)

reverse-proxy haproxy elasticsearch kibana-4 devops

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

在 haproxy 后端使用域而不是 IP

我有 2 个虚拟主机

app.example.com:80 在 IP 地址上 xxx.xxx.xxx.xxx

app2.example.com:80 在 IP 地址上 yyy.yyy.yyy.yyy

我的haproxy ipaddress是 sss.sss.sss.sss

这是 haproxy 配置:

global
   log 127.0.0.1 local0 notice
   maxconn 2000
   user haproxy
   group haproxy

defaults
  log     global
  mode    http
  option  httplog
  option  dontlognull
  retries 3
  option redispatch
  timeout connect  5000
  timeout client  10000
  timeout server  10000

frontend www-http
    mode http
    bind *:80
    default_backend appname
    stats enable
    stats uri /haproxy?stats
    stats auth admin:password
    stats show-node

backend appname
  balance roundrobin
  option httpclose
  option forwardfor
  server lamp1 …
Run Code Online (Sandbox Code Playgroud)

networking haproxy

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

Haproxy ssl 重定向握手失败

我有使用 http 和 https 的 haproxy v1.5.4。我将 *:80 & :*443 绑定到相同的前端并使用相同的 acl。

我想创建一个 http -> https 重定向

frontend http-in
    bind *:80
    bind *:443 ssl crt /etc/pki/tls/certs/...

    ...

    acl is_office path_beg /office
    http-request redirect scheme https if !{ ssl_fc } is_office

    use_backend office if is_office
Run Code Online (Sandbox Code Playgroud)

这引起

10.XXXXX:36909 [16/Dec/2015:17:23:07.678] http-in/2: SSL handshake failure
Run Code Online (Sandbox Code Playgroud)

当我通过 http 访问时(期待重定向)

如果我通过 https 访问,那么它会正确地访问后端并通过 443 代理通过服务。

backend office
  balance roundrobin
  server backbone-daily 10.XXXXXX:443 ssl check verify none
Run Code Online (Sandbox Code Playgroud)

自签名证书无需重定向即可验证和工作。感觉就像我在重定向阶段遗漏了一些东西。

非常感谢任何帮助

ssl redirect haproxy

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

HAProxy 平衡器使用 url_param 值?

我有 3 个不同的 Restful 服务器:w1、w2、w3

引用我的负载均衡器的客户端提供名为“ip”(ipv4) 的 url 参数。请求之间的 url 参数 ip 是不同的:

curl -XGET http://localhost:8080/api/v1/link?ip=x.x.x.x
Run Code Online (Sandbox Code Playgroud)

我想使用 HASH 算法根据 ip 参数平衡 HAProxy 到 w1、w2、w3。

HAProxy 配置如下:

global
    #daemon
    maxconn 3000

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

frontend http-in
    bind *:80
    default_backend workers

backend workers
    balance url_param ip
    hash-type consistent
    server w1 localhost:8080 weight 1 maxconn 1000 check
    server w2 localhost:8081 weight 1 maxconn 1000 check
    server w3 localhost:8082 weight 1 maxconn 1000 check

listen …
Run Code Online (Sandbox Code Playgroud)

hash load-balancing haproxy

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

Haproxy ACL 用于比较标头中的值

我使用 Haproxy 作为 SSL 终止来识别客户端证书。我想检查客户端证书中的 CN 值是否与客户端发送的标头值匹配。如果证书中的 CN 值与标头中的值不匹配,有没有办法设置 ACL?

就像是:

http-request set-header X-SSL-Client-CN     %{+Q}[ssl_c_s_dn(cn)]
acl id_not_match hdr(client-id) -m hdr(X-SSL-Client-CN)
Run Code Online (Sandbox Code Playgroud)

ssl haproxy

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

如何使用 ansible docker_container 模块重新加载配置?

我正在尝试docker kill -s HUP <container>在 Ansible 中完成,但看起来我尝试的选项总是重新启动容器或尝试而不是重新加载配置。

运行以下命令允许我在不重新启动容器的情况下重新加载配置:

docker kill -s HUP <container>

Ansibledocker_container文档建议了以下选项:

force_kill 停止正在运行的容器时使用 kill 命令。

kill_signal 覆盖用于终止正在运行的容器的默认信号。

单独使用kill_signal没有任何作用。

下面是我希望能起作用的一个例子:

- name: Reload haproxy config
  docker_container:
    name: '{{ haproxy_docker_name }}'
    state: stopped
    image: '{{ haproxy_docker_image }}'
    force_kill: True
    kill_signal: HUP
Run Code Online (Sandbox Code Playgroud)

我假设覆盖force_killkill_signal会给我所需的行为。我也尝试将状态设置为“开始”和present.

这样做的正确方法是什么?

haproxy ansible docker

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