Articles of haproxy

HAProxy使用查询参数覆盖后端cookie

基于这个答案 ,我可以用查询参数成功覆盖后端: backend servers balance roundrobin cookie SERVERID insert indirect nocache use-server web1 if { urlp(SERVERID) -i web1 } use-server web2 if { urlp(SERVERID) -i web2 } server web1 web1-internal:80 check cookie web1 server web2 web2-internal:80 check cookie web2 不过,我希望在后续的要求中“坚持” 即我想要一个新的Set-Cookie与查询参数的值来覆盖任何现有的SERVERIDcookies。 如果请求带有有效的SERVERID Cookie,则HAProxy不会添加Set-Cookie。 删除indirect选项不起作用。 是唯一的解决scheme使用preserve和后端始终与Set-Cookie响应,或者有办法在HAProxy中做到这一点?

haproxy服务器检查%

我想在三个后端负载平衡请求到同一个端口。 我有大约20个端口转发,所以我需要一个方法来使其dynamic。 这是为了平衡我们的prod,pre-prod,qa,dev,多个域的unit testing服务器。 所以,是的,我可以使用20个后端,20个acl和20个use_backends。 但是,然后忘记它。 太麻烦了。 所以,我想用一个variables来表示“被请求的端口”。 我尝试%[dst_port],因为这似乎在其他一些情况下工作。 我从Willy T的某个地方读到一个答案,如果一个人离开了港口,那么它只是转发到同一个港口。 但它仍然需要服务端口或检查端口,我不知道提前,除非我绑定到20个不同的前端。 错误:服务器X既没有服务端口也没有检查端口,也没有tcp_check规则“连接”与端口信息。 检查已被禁用。 例如。 listen load-balance bind :28080 bind :42080 bind :48080 bind :58080 bind :38080 mode http balance roundrobin option httpchk HEAD / HTTP/1.1\r\nHost:\ localhost server X 10.20.30.1 check %[dst_port] server Y 10.20.30.2 check %[dst_port] server Z 10.20.30.3 check %[dst_port] 你看,它需要一个variables。 这可能吗? (我的问题更加复杂,因为从技术上讲,我需要一个从目标端口到检查端口的映射,理想情况下,但是如果我能做到这一点,至less可以做到这一点。

HAProxy 1.7不parsingdocker1.13.1容器

docker ps -a : de09facf7c91 x/x:x "/usr/bin/supervisord" 51 minutes ago Up 24 minutes 8080/tcp development-karl 226a1b80a233 x/x:x "/usr/bin/supervisord" 2 hours ago Up About a minute 0.0.0.0:80-84->80-84/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:1988->1988/tcp, 5672/tcp haproxy 用这个启动容器: docker run –name development-karl -h development-karl -dx/x:x 我haproxy.cfg一部分: backend karl_dev_backend balance roundrobin option forwardfor server karl_dev development-karl cookie development-karl weight 1 maxconn 1024 check […]

SSL在Haproxy上卸载多个域(多个证书)

假设我们在2 apache前面有haproxy: +—-> Apache (10.0.0.2) Haproxy (10.0.0.1) –| +—-> Apache (10.0.0.3) Haproxy被configuration为负载平衡基于URI的stream量(需要看到URI,所以必须看到HTTP的内容) Apache正在托pipe大量的域名 每个域都可以通过haproxy通过HTTPS访问,卸载SSL并启动到Apache的HTTP连接 每个域都有自己的SSL证书(无SAN或通配证书) 我看到Haproxy允许我们提供一个包含许多证书的目录,但是我没有设法使用另一个单一的证书。 这是我的(简化)configuration: global […] # Default SSL material locations ca-base /etc/ssl/certs crt-base /etc/ssl/private # Default ciphers to use on SSL-enabled listening sockets. ssl-default-bind-options no-sslv3 ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS # For backends connections ssl-default-server-options no-sslv3 ssl-default-server-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS frontend https_frontend bind 10.0.0.1:443 ssl crt […]

无法查看被认为“closures”的服务器的日志

我们有一个HA MariaDB集群,我们的负载平衡器突然开始无法将我们的db节点看作在线。 我们已经更新了我们的应用程序直接击中节点并绕过负载平衡器,因为我们无法弄清楚发生了什么。 haproxyconfiguration global log 127.0.0.1 local0 log 127.0.0.1 local1 notice #log loghost local0 info maxconn 4096 #debug #quiet user haproxy group haproxy defaults log global mode http retries 3 timeout client 50s timeout connect 5s timeout server 50s option dontlognull option redispatch option tcplog balance roundrobin # Set up application listeners here. listen […]

HAProxy – 是否有一种方法来添加身份validation套接字

我们希望在HAProxy中使用以下行来允许我们远程启用和禁用服务器: global stats socket [email protected]:1000 level admin 有没有办法给这个添加基本的身份validation? 或者添加一个用户名和密码,以便谁可以访问这个端口?

在HAProxy 1.5的帮助下,在数字url之前加上“player-”

我在CentOS 7 Linux上运行一个embedded在Wordpress / Jetty后面的HAProxy 1.5网页游戏。 该网站可以作为http和https访问。 我已经修改WordPress的显示播放器configuration文件页面的url如下所示: https://slova.de/player-12345 其中12345是我的网页游戏中的数字播放器ID。 这工作得很好,但我想简化上面的url https://slova.de/12345 然后使用HAProxy 将“player-”部分预先设置为仅限数字的path 。 所以我已经添加到/etc/haproxy/haproxy.cfg文件的行: http-request redirect code 301 prefix /player- if { path_end /5 } 但是,由于某些原因,导致url不完整: https://slova.de/player-/player-/player-/player-/player-/player-/player-/player-/player-/player-/player-/player-/player-/player-/播放器- /播放器- /播放器- /播放器- /播放器- /播放器- /播放器- / 5 下面是我完整的haproxy.cfg文件来提供更多的上下文: global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon stats socket […]

HAProxy nbsrv似乎给了错误的价值

我在ACL规则中使用nbsrv来确定是否允许请求(1)。 configuration示例: defaults mode http frontend front_www listen 0.0.0.0:80 acl acl_backend_down nbsrv(back_www) lt 1 http-request deny if acl_backend_down default_backend back_www backend back_wwww server s1 1.2.3.1:80 check server s2 1.2.3.2:80 check server haproxy-dc2 1.3.4.1:80 check backup 有了这个configuration,我期望当s1和s2closures时,nbserv将会是0,并因此返回一个HTTP 403。 不幸的是,直到我取下备份服务器(haproxy-dc2)才发送403。 如果我将ACL规则更改为less于两个(即): acl acl_backend_down nbsrv(back_www) lt 2 然后它按照我预期的方式运行:当后端只有一个主要的可用的时候,它发送403。 我想也许有一些奇怪的小于运营商,所以改为eq 0 ,但这也不起作用。 有没有办法强制nbsrv像我所期待的那样工作,或者有其他方式来检测后端的所有初选是否失效? (1)这个ACL是更大规则集的一部分,我把它简化成最小的可重现的例子。 如果您有其他解决scheme可以让我检测是否使用备份服务器,请告诉我。 大图的tl; dr允许两个haproxy实例相互故障转移,但是防止无限循环(例如,如果dc01的后端处于closures状态,那么对dc01的dc01健康检查的响应应该是403 / down) […]

看来Haproxy会发出错误的证书

我正在尝试使用haproxy来保护域名。 当我加载URL:bitbucket.kl.company.com,我得到的错误: bitbucket.kl.company.com uses an invalid security certificate. This certificate is only valid for the following names: *.company.com, company.com, bitbucket-mirror.company.com Error Code: SSL_ERROR_BAD_CERT_DOMAIN 现在,如果我进入服务器并执行以下操作: openssl x509 -text -noout -in /etc/haproxy/certs/cert.pem | grep DNS DNS:*.company.com, DNS:company.com, DNS:bitbucket.kl.company.com 我联系了颁发证书的Digicert,他们说服务器发出了错误的证书。 在我的haproxy.cfg中我有: frontend bitbucket_http_frontend bind *:80 bind *:443 ssl crt /etc/haproxy/certs/cert.pem ciphers HIGH:!aNULL:!MD5 redirect scheme https code 301 if […]

configurationHAProxy以包含不同后端的主机头

我正在探索在IIS上运行的一组Web API之前使用HAProxy作为平衡器。 node1.myapp.mycompany.com node2.myapp.mycomapny.com 我们目前正在使用主机头来正确parsingIIS上正确的Web应用程序。 例如,我们可能使otherapp.mycompany.com运行在同一个服务器/端口上,但是使用主机头IIS知道要提供哪一个。 我在HAProxy最初的尝试给我留下了404错误,因为我没有在我的请求中包含主机头,所以IIS正在返回绑定到给定IP的默认站点,而不是通过主机名parsing。 修复给我留下了这样的东西: frontend localnodes bind *:80 mode http default_backend nodes backend nodes mode http balance roundrobin option forwardfor reqirep ^Host: Host:\ node1.myapp.mycompany.com server web01 node1.myapp.mycompany.com:80 这对于单个后端来说是非常好的,但是我仍然在分头讨论如何包含正确的主机头,具体取决于哪个后端正在提供请求: backend nodes mode http balance roundrobin option forwardfor reqirep ^Host: Host:\ node1.myapp.mycompany.com server web01 node1.myapp.mycompany.com:80 server web02 node2.myapp.mycompany.com:80 因为在IIS中不能正确parsingnode2,所以上面的方法是行不通的(在这种情况下,node2在不同的服务器上,因此IP不同),事实上,如果它们运行在同一台服务器/ ip上,我怀疑请求工作“工作”,但他们都将由node1每个主机头)。 是否可以根据用于提供请求的后端的url来设置主机? 如果是这样,这意味着我的check也需要提供基于后端的正确的主机头,这将如何做? 编辑:我使用HA-Proxy版本1.7.9 […]