标签: haproxy

HAProxy:显示“BADREQ” | BADREQ 数以千计

我的 HAProxy 配置。

#HA-Proxy version 1.3.22 2009/10/14  Copyright 2000-2009 Willy Tarreau <w@1wt.eu>
global
    maxconn 10000
    spread-checks 50
    user haproxy
    group haproxy
    daemon
    stats socket /tmp/haproxy
    log localhost   local0
    log localhost   local1 notice

defaults
    mode    http
    maxconn 50000
    timeout client 10000
    option forwardfor except 127.0.0.1
    option httpclose
    option httplog

listen dcaustin 0.0.0.0:80
    mode http
    timeout connect 12000
    timeout server 60000
    timeout queue 120000
    balance roundrobin
    option httpchk GET /index.html
    log global
    option httplog
    option dontlog-normal
    server web1 10.10.10.101:80 maxconn 300 check …
Run Code Online (Sandbox Code Playgroud)

reverse-proxy load-balancing haproxy ubuntu-10.04

6
推荐指数
1
解决办法
7004
查看次数

haproxy acl - 仅接受来自特定 IP 的信息

我有 haproxy,需要向没有直接连接的服务器提供 smtp。

这是我的配置的一部分:

listen smtp     10.12.23.10:3025
    mode tcp
    server smtp     172.30.33.12:25
    #tcp-request inspect-delay 2s
    acl white_list src 10.146.5.247 10.146.5.201
    tcp-request content accept if white_list
    tcp-request content reject 
Run Code Online (Sandbox Code Playgroud)

任何连接到端口的尝试都会被拒绝。如果我删除行tcp-request content reject- 适用于所有人,但默认情况下 haproxy 接受一切。只允许两个或更多服务器进入的正确方法是什么?

我也试过以下几行:

tcp-request content reject unless whitelist
tcp-request content reject if !whitelist
Run Code Online (Sandbox Code Playgroud)

如果有帮助,我有 haproxy 1.4.18。

access-control-list haproxy

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

Pacemaker Active/Active haproxy 负载均衡

我正在使用 Haproxy 对复制的 mysql 主服务器进行负载平衡。我还使用 Heartbeat 和 Pacemaker 进行 Active/Active ip 故障转移,并在两个负载均衡器上使用两个虚拟 ip,以实现 Web 服务器的高可用性。我使用起搏器中的位置在每个负载均衡器上保留一个 VIP,我使用指向 VIP 的循环 DNS 域来负载均衡负载均衡器。到目前为止一切看起来都很好!

| LB1 : | 循环-->| 1.2.3.4 | 心跳起搏器 | 代理 | 192.168.1.1

          |           |           |             |         |
Run Code Online (Sandbox Code Playgroud)

| LB2 : | 循环-->| 5.6.7.8 | 心跳起搏器 | 代理 | 192.168.1.2

crm配置显示

node $id="394647e0-0a08-451f-a5bf-6c568854f8d1" lb1
node $id="9e95dc4f-8a9a-4727-af5a-40919ac902ba" lb2
primitive vip1 ocf:heartbeat:IPaddr2 \
    params ip="1.2.3.4" cidr_netmask="255.255.255.0" nic="eth0:0" \
    op monitor interval="40s" timeout="20s"
primitive vip2 ocf:heartbeat:IPaddr2 \
    params ip="5.6.7.8" cidr_netmask="255.255.255.0" nic="eth0:1" \
    op monitor …
Run Code Online (Sandbox Code Playgroud)

mysql failover load-balancing pacemaker haproxy

6
推荐指数
1
解决办法
6225
查看次数

在 haproxy 中覆盖 X-Forwarded-For 标头?

在我的 HAProxy 负载均衡器中,我有以下配置块:

defaults
    mode                    http
    log                     global
    option                  httplog clf
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch

frontend  main_http *:80
    option forwardfor except 127.0.0.1
    option httpclose
    default_backend         backend_http

backend backend_http
    balance     roundrobin
    option httpchk
    server  node1 10.0.0.64:80 check port 80
    server  node2 10.0.0.65:80 check port 80
    server  node3 10.0.0.66:80 check port 80
Run Code Online (Sandbox Code Playgroud)

在节点 (Tomcat) 上,我以这种格式记录请求(与第一个字段中的 x-forwarded-for 和真正的 REMOTE_ADDR 相结合):

pattern='%{X-Forwarded-For}i - %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i" %a'
Run Code Online (Sandbox Code Playgroud)

这似乎适用于大多数请求,但在某些情况下,我假设客户端位于代理后面,我看到第一个字段包含这些值的请求(每行代表一个真实请求,我破坏了真实 IP隐私):

10.83.103.44, 10.83.103.44 
10.83.198.52, 10.83.198.52 
10.53.109.36, …
Run Code Online (Sandbox Code Playgroud)

tomcat haproxy x-forwarded-for

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

如何让 nginx 始终返回 HTTP 503?

我在多个其他服务器上的应用程序前面使用 HAproxy。我想在本地 nginx 实例中设置一个 vhost,它仅为每个请求提供 503(在所有后端都关闭时用作“备份”服务器)。我知道如何设置自定义错误页面(如当我的代理应用程序服务器关闭时如何让 Nginx 返回 HTTP 503?)但是我如何才能使每个对 nginx 的请求都返回 503?

nginx 503-error haproxy

6
推荐指数
1
解决办法
9183
查看次数

如何处理 20k 并发持久连接

我正在尝试设计一种架构来处理大量 TCP 套接字连接,但我对这种架构的局限性表示怀疑。

我将不得不处理大约 20k 个并发TCP 连接,这些连接是长轮询连接,它们将保持连接很长时间,并且每分钟发送一次数据。

使用线程是没有问题的,因为 20k 线程会耗尽系统资源。我打算使用gevent来处理如此多的并发连接,或者甚至使用haproxy和 2 个服务器(w/gevent)来处理每个连接 10k 个连接。这有道理吗?有没有人有一些建议或有使用具有 10K+ 连接的gevent 的经验?有没有人知道处理这些连接的硬件要求?我看到一些基准测试显示了 5k 并发连接上 gevent 的大量连接超时,这对我的问题来说不是很有希望。

注意:我已经阅读了关于 C10k 问题和“百万用户彗星应用程序”的建议。

python haproxy long-polling

6
推荐指数
1
解决办法
2170
查看次数

haproxy NOSRV 问题与重定向端口

我试图在一个端口 (8080) 上捕获 http 流量并将其重定向到一个内部端口 (12345)。我的 haproxy.cfg 中有以下内容

frontend rest_front
   bind *:8080
   #reqadd X-Forwarded-Proto:\ http
   #reqadd X-Forwarded-Port:\ 12345

   acl host_rest hdr(host) -i mypublicserver.myhost.com

   stats uri /haproxy?stats
   acl url_blog path_beg /blog

   # figure out which one to use
   use_backend rest_cluster if host_rest

backend rest_cluster
   server rest_server_host myinternalserver.myotherhost.com:12345 check
Run Code Online (Sandbox Code Playgroud)

当我测试与 mypublicserver.myhost.com 的连接时,我在日志文件中看到以下内容...

Aug 10 14:18:35 myproxy haproxy[30258]: <IP_ADDRESS>:56779 [10/Aug/2017:14:18:35.309] rest_front rest_front/<NOSRV> -1/-1/-1/-1/2 503 213 - - SC-- 1/0/0/0/0 0/0 "GET /somepage.html HTTP/1.1"
Run Code Online (Sandbox Code Playgroud)

我不明白为什么后端没有被击中。我使用的 URL 是http://mypublicserver.myhost.com:8080/somepage.html,它应该触发 acl。

configuration haproxy

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

HAProxy 子域和路径重定向

我是 StackExchange 的新手,正在尝试寻找一些有关配置问题的帮助。我需要为 HAProxy 创建一个配置,它允许我将 Tomcat 应用程序上下文路径动态代理到子域。子域/路径不能硬编码,应设置为变量。我已经查看了整个站点中建议的其他内容,但没有一个涉及这个特定问题。到目前为止,我已经从各种现有建议中汇总了此配置。

这就是我需要的。

  • 用户请求 -> http://site1.domain.com/path
  • 重定向到 https
  • HAProxy 然后使用 URL 向其后端池发出请求 http://<ip>:8080/site1/path

当 tomcat 应用程序返回指向资产的链接时,它们也会有一个需要重定向的路径。

  • 网站退货 https://site1.example.com/site1/image.jpg
  • 如果存在,从路径中删除第一个 site1。 https://site1.example.com/image.jpg

我已经使用本网站的示例和其他指南获得了这么多,但我在这方面的知识有限。我不确定如何删除路径中的 site1。

# Frontend Definition
frontend tomcat_contexts
    bind *:80
    bind *:443 ssl crt /etc/haproxy/cert.pem
    acl http ssl_fc,not
    http-request redirect scheme https if http
    reqadd X-Forwarded-Proto:\ https
    default_backend cluster

# Backend Definition
backend cluster
    balance roundrobin
    cookie JSESSIONID prefix nocache

    # Perform Subdomain url rewrite
    http-request set-var(req.subdomain) req.hdr(host),lower,regsub(\.example\.com$,) if { hdr_end(host) -i .domain.com }
    http-request …
Run Code Online (Sandbox Code Playgroud)

configuration tomcat subdomain haproxy

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

haproxy 将自定义 http 流量重定向到自定义 https 端口

我希望根据我接收流量的端口将我的自定义 http 端口流量重定向到自定义 https 端口

我有多个绑定语句:

 bind 1.2.3.4:7777
 bind 1.2.3.4:8888
 bind 1.2.3.4:9999 ssl crt /etc/haporxy/somecert.crt
Run Code Online (Sandbox Code Playgroud)

我试过的:

acl is7777 dst_port 7777
http-request redirect code 301 https://%[req.hdr(Host)]:9999%[capture.req.uri] if is7777
Run Code Online (Sandbox Code Playgroud)

但是,当我查看 Chrome 开发工具中的日志时,我总是看到 req.hdr(Host) 的值保留了旧端口的值,因此我被重定向到

 https://1.2.3.4:7777/:9999/.
Run Code Online (Sandbox Code Playgroud)

如何仅获取域名并将其重定向到所需的目标端口 9999

此外,像这样的事情:

http-request replace-value Host (.*):7777 \1:9999
Run Code Online (Sandbox Code Playgroud)

由于稍后有多个重定向,因此中断了应用程序流程。我需要从 7777(http) 转到 9999(https) 。haproxy 版本:1.5

ssl https redirection haproxy

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

通过另一个容器路由 Docker 容器流量

我正在尝试通过容器 A(10.10.1.3,haproxy,以透明代理模式设置)将容器 B(10.10.1.2,使用 mysql 的自定义二进制文件并在端口 4242 上运行)的 tcp 流量路由到外部世界,它们共享10.10.1.0/24桥接模式下的相同用户定义的 docker 网络

容器 B 不暴露端口,只暴露容器 A。

在容器 B 上:

# ip route show
default via 10.10.1.1 dev eth0
10.10.1.0/24 dev eth0 proto kernel scope link src 10.10.1.2
# ip route replace default via 10.10.1.3
# ip route show
default via 10.10.1.3 dev eth0
10.10.1.0/24 dev eth0 proto kernel scope link src 10.10.1.2
Run Code Online (Sandbox Code Playgroud)

在容器 A(haproxy)上:

sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv4.ip_nonlocal_bind=1
iptables -t mangle -N DIVERT
iptables -t mangle -A …
Run Code Online (Sandbox Code Playgroud)

routing haproxy docker

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