标签: haproxy

一台服务器上有多个 IP 的 haproxy

我使用 haproxy 对多个虚拟机(Web 服务)进行负载均衡。每个虚拟机都有多个 IP 地址。

在 haproxy 上进行设置的最佳做法是什么?现在我的配置是虚拟机的每个IP在haproxy上都有一个条目“listen”,对应的两个真实服务器。

请问它是否可以像多个“监听”和只有两个后端服务器一样修改。因为所有“侦听 IP”仅转发到同一虚拟机。

global
    chroot /var/lib/haproxy
    pidfile /var/run/haproxy.pid
    stats socket /var/run/haproxy.stat mode 666
    maxconn 4096
    user haproxy
    group haproxy
    daemon

defaults
    mode http
    log global

    log 127.0.0.1 local0 notice
    option dontlognull
    option redispatch
    timeout connect 10000 # default 10 second time out if a backend is not foun
    timeout client 300000
    timeout server 300000
    maxconn 60000
    retries 3

listen stats

    bind xx.xxx.xxx.xxx:8888
    stats uri /
    stats realm Haproxy\ Statistics
    stats auth user:pass …
Run Code Online (Sandbox Code Playgroud)

ip haproxy

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

当所有后端服务器都在 Apache 后面运行 HAProxy 时,获取 502 而不是 503

我正在测试运行 HAProxy 作为 Apache 2.2 后面的专用负载均衡器,替换我们当前使用 Apache 负载均衡器的配置。在我们当前的 Apache 设置中,如果所有后端(源)服务器都关闭,Apache 将提供 503 服务不可用消息。使用 HAProxy,我得到 502 错误的网关响应。

我在 Apache 中使用了一个简单的反向代理重写规则

RewriteRule ^/(.*) http://127.0.0.1:8000/$1 [last,proxy]
Run Code Online (Sandbox Code Playgroud)

在 HAProxy 我有以下(在默认 tcp 模式下运行)

defaults
    log             global
    option          tcp-smart-accept
    timeout connect 7s
    timeout client  60s
    timeout queue   120s
    timeout server  60s

listen my_server 127.0.0.1:8000
    balance leastconn
    server backend1 127.0.0.1:8001 check observe layer4 maxconn 2
    server backend1 127.0.0.1:8001 check observe layer4 maxconn 2
Run Code Online (Sandbox Code Playgroud)

在后端服务器关闭时测试直接连接到负载均衡器:

[root@dev ~]# wget http://127.0.0.1:8000/ test.html
--2012-05-28 11:45:28--  http://127.0.0.1:8000/
Connecting to 127.0.0.1:8000... connected.
HTTP …
Run Code Online (Sandbox Code Playgroud)

reverse-proxy load-balancing haproxy apache-2.2

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

通过 Haproxy 转发真实 IP => Nginx => Unicorn

如何将真实访客的 IP 地址转发给 Unicorn?目前的设置是:

Haproxy => Nginx => Unicorn
Run Code Online (Sandbox Code Playgroud)
  1. 如何将真实 IP 地址从 Haproxy 转发到 Nginx,再到 Unicorn?目前它总是只有 127.0.0.1
  2. 我读到 X 标头将被弃用。http://tools.ietf.org/html/rfc6648 - 这将如何影响我们?

Haproxy 配置:

# haproxy config
defaults
    log global
    mode    http
    option  httplog
    option  dontlognull
    option httpclose
    retries 3
    option redispatch
    maxconn 2000
    contimeout  5000
    clitimeout  50000
    srvtimeout  50000

# Rails Backend
backend deployer-production
    reqrep    ^([^\ ]*)\ /api/(.*)  \1\ /\2
    balance     roundrobin
    server      deployer-production localhost:9000 check
Run Code Online (Sandbox Code Playgroud)

Nginx 配置:

upstream unicorn-production {
  server unix:/tmp/unicorn.ordify-backend-production.sock fail_timeout=0;
}

server {
  listen …
Run Code Online (Sandbox Code Playgroud)

http nginx haproxy unicorn

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

为什么第 7 层负载均衡器配置不需要任何客户端配置更改?

例如,对于haproxy(第7层)负载均衡,只需要配置VIP(即集群IP)后面的“真实服务器”或“后端”即可。例如:

listen smtp 192.168.3.10:25
        mode tcp
        balance roundrobin
        server smtp1 192.168.3.1:25 check
        server smtp1 192.168.3.2:25 check
Run Code Online (Sandbox Code Playgroud)

但是,对于lvs(第 4 层),我需要:

  1. 将本lvs机设置为路由器,实现“NAT路由”
  2. lvs机和后端都配置有与后端的一些ARP MODS的VIP

如果没有更复杂的配置,第 7 层负载平衡如何设法做到这一点?我在这里误解或遗漏了一些基本的东西吗?

linux cluster load-balancing haproxy lvs

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

haproxy :检查单个标头

我的服务器正在 4 个本地 websocket 服务器上分发 websocket 客户端连接。

是否可以指示 haProxy 仅接受 WebSocket 版本 13 (RFC 6455)?

验证是否Sec-WebSocket-Version: 13设置

haproxy

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

使用 ipv6 在 chrome 中很长的“连接”

连接到 ipv6 子域 www6.example.com 需要很长时间。在 chrome 中,net 选项卡显示“连接”花费了 20 秒。所有其他时间都快得多。

然而,只有前两个连接很慢(有时是 21 秒、41 秒、24 秒)。以下请求远低于 1 秒。等待约 2 分钟,前 2 个请求再次该死的慢。

通过 ipv4 子域 www.example.com 调用同一个服务器(同时)相当快。

通过 ipv6 调用其他服务器(同时)也相当快。

在服务器上运行 ubuntu 精确与 haproxy。处理的大部分流量是 ipv4。

服务器端有这么长时间才建立连接是什么问题?

我很高兴获得任何见解,并热衷于提供更多信息。

在此处输入图片说明

编辑:添加了来自 chrome 的屏幕截图。

networking ubuntu ipv6 haproxy

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

HAProxy 将流量重定向到 NGINX 出现错误“纯 HTTP 请求已发送到 HTTPS 端口”

我们试图让 HAProxy 侦听来自端口 443(HTTPS 和 WSS)的所有传入流量

下面是我们的 HAProxy 配置:

frontend wwws
  bind 0.0.0.0:443 ssl crt /etc/haproxy/server.pem
  timeout client 1h
  default_backend www_backend

backend www_backend
  mode http
  stats enable
  stats uri /haproxy
  option forwardfor
  reqadd x-forwarded-proto:\ https

  server server1 backend:3000 weight 1 maxconn 8192 check
Run Code Online (Sandbox Code Playgroud)

0.0.0.0:443(例如https://example.com)是我们的 HA 代理服务器,它监听所有传入的 443 流量后端:3000 是我们的 nginx 服务器,它被设置为监听 SSL 连接

我们现在面临的当前问题是,当我们输入https://example.com 时,浏览器显示以下错误:

400 Bad Request
The plain HTTP request was sent to HTTPS port
nginx/1.7.5
Run Code Online (Sandbox Code Playgroud)

当 haproxy 将流量转发到 nginx(后端:3000)时,它似乎确实会转换为 http。

我认为“reqadd x-forwarded-proto:\ https”应该确保它是https。 …

ssl nginx haproxy

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

限制 HAProxy 上特定路径的最大请求数/秒

我正在尝试实现这种情况:

仅在特定路径上,我在前端收到稳定的 9 个请求/秒。一切都很好,使用常规后端。我现在收到 11 req/s,我想拒绝任何超过 10 的请求。但仍然想继续回复最大 10 req/sec。

我发现并尝试实现的所有内容(如下所示:https : //blog.codecentric.de/en/2014/12/haproxy-http-header-rate-limiting/)都是黑色或白色的解决方案,一旦率达到。所以它是一种防止 DDOS、滥用者的保护,但不是真正的速率限制解决方案。

有什么方法可以实现吗?
PS:使用 HAproxy 1.5.8

haproxy rate-limiting

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

禁用 Haproxy Logging 消息

我有问题haproxy。每次关闭 virtuoso 时,haproxy 都会显示以下错误消息:

来自 syslogd@master0 的消息于 7 月 9 日 14:39:18 ... haproxy[4403]:后端 virtuoso 没有可用的服务器!

我找到了 他们建议使用的以下链接*.emerg;local2.none  *但我真的不明白它如何提供帮助以及它应该在配置文件中的位置。

如何修改配置文件以隐藏错误消息。


配置文件

#$export HAPROXY=/scratch_globa/HAProxy/haproxy-1.5.12-dist

global
        log /dev/log    local0
        log /dev/log    local1 notice
        user    test
        group   test_1
        maxconn 8890
        daemon

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull

#
#  Listen on *:80 - Send traffic to the backend named "apache"
#
frontend www-http
    bind *:8890
    default_backend virtuoso

#
# Back-end definition.
#
backend …
Run Code Online (Sandbox Code Playgroud)

haproxy

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

如何让 haproxy 登录到 systemd/journald?

我有一个当前的 Linux 系统,我想与 haproxy 一起使用。Journald 很乐意从 中记录 stdout .service,并将日志标记为来自该服务,但haproxy 似乎无法登录到 stdout

让 haproxy 登录到 systemd/journald 的最简单、最干净的方法是什么?

编辑:当前配置是默认值:

global
    log         127.0.0.1 local2
Run Code Online (Sandbox Code Playgroud)

但是没有local2设施,因为本地机器上没有系统日志。

logging haproxy systemd journald

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