我想在 haproxy 1.4 前面放置 stunnel 来处理 HTTPS 流量。我还需要 stunnel 添加X-Forwarded-For标头。这可以通过 haproxy 网站上的“stunnel-4.xx-xforwarded-for.diff”补丁来实现。
但是,描述中提到:
请注意,此补丁不适用于 keep-alive,...
我的问题是:这对我来说在实践中意味着什么?我不确定,
我正在使用具有以下后端配置的 HAProxy 1.4.18
backend staging
option httpchk HEAD /check.txt HTTP/1.0
http-check disable-on-404
default-server error-limit 1 on-error mark-down
server staging01 x.x.x.x:80 check observe layer7
server staging02 x.x.x.x:80 check observe layer7
Run Code Online (Sandbox Code Playgroud)
服务器在 apache/passenger 上运行多个应用程序。
httpchk 和 disable-on-404 的组合允许从 lb 中轻松关闭和删除服务器,同时仍然能够直接访问(即用于测试)。
我正在尝试设置观察以便在应用程序不工作时禁用服务器。我破坏了 staging02 上的应用程序配置,所以它总是返回 500。它在第一个 500 之后被正确标记为 DOWN,但在下一个 httpchk 被标记为 UP。
这是日志文件:
Server staging/staging02 is DOWN, reason: Health analyze, info: "Detected 1 consecutive errors, last one was: Wrong http response". 1 active and 1 backup servers left. 2 sessions active, 0 requeued, 0 …Run Code Online (Sandbox Code Playgroud) 我的 haproxy.cfg 文件有两个使用主机名的后端服务器:
server ops-ca-revealv2e-prod-1 ops-ca-revealv2e-prod-1:443 cookie ops-ca-revealv2e-prod-1 ssl weight 1 maxconn 512 check
server ops-ca-revealv2e-prod-2 ops-ca-revealv2e-prod-2:443 cookie ops-ca-revealv2e-prod-2 ssl weight 1 maxconn 512 check
Run Code Online (Sandbox Code Playgroud)
这些主机名是 Amazon OpsWorks 的一部分,并且会在实例启动或关闭时自动注入 /etc/hosts。如果我在其中一个实例关闭时尝试重新启动 HAProxy,则会收到错误消息:
[ALERT] 362/225440 (27202) : parsing [/opt/haproxy-ssl/haproxy.cfg:42] : 'server ops-ca-revealv2e-prod-2' : invalid address: 'ops-ca-revealv2e-prod-2' in 'ops-ca-revealv2e-prod-2:443'
[ALERT] 362/225440 (27202) : Error(s) found in configuration file : /opt/haproxy-ssl/haproxy.cfg
[ALERT] 362/225440 (27202) : Fatal errors found in configuration.
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉 HAProxy 检查主机名是否有效?如果有效,则使用它,如果无效,则忽略它。
我正在使用 haproxy 为在单个服务器上运行的多个应用程序直接路由。对于正在使用的域之一,有几十个子域应该指向少数应用程序之一。
目前,我在单独的一行中列出了所有这些子域。我的前端配置如下所示:
frontend http-in
bind *:80
acl alpha hdr(host) -i alpha.com
acl beta hdr(host) -i beta.com
acl gamma00 hdr(host) -i apple.gamma.com
acl gamma01 hdr(host) -i banana.gamma.com
acl gamma02 hdr(host) -i cherry.gamma.com
acl gamma03 hdr(host) -i durian.gamma.com
acl gamma04 hdr(host) -i elderberry.gamma.com
acl gamma05 hdr(host) -i fig.gamma.com
acl gamma06 hdr(host) -i grapefruit.gamma.com
acl gamma hdr(host) -i gamma.com
use_backend a if alpha
use_backend b if beta
use_backend sub1 if gamma00
use_backend sub1 if gamma01
use_backend sub1 if gamma02
use_backend sub2 …Run Code Online (Sandbox Code Playgroud) 我是这种负载平衡方案的新手,我的任务是弄清楚如何使这种负载平衡起作用。
我的环境:
Centos 6.4 64 Bit
Webserver: Lighttpd
All running in ESXI
virtual IP: 192.168.1.6
LB1: 192.168.1.4
LB2: 192.168.1.5
Webserver 1: 192.168.1.12
Webserver 2: 192.168.1.13
Gateway: 192.168.1.1
Run Code Online (Sandbox Code Playgroud)
尝试在使用 HAproxy 和 keepalived 生产之前在实验室中运行测试。这是我的 keepalived 设置:
!keepalived的配置文件
global_defs {
notification_email {
myemail@gmail.com
}
notification_email_from keepalived@domain.local
smtp_server 192.168.1.4
smtp_connect_timeout 30
router_id 192.168.1.1
}
vrrp_script chk_haproxy {
script "killall -0 haproxy"
interval 1 # check every second
weight 2 # add 2 points of prio if OK
}
vrrp_instance VI_1 {
state MASTER
interface …Run Code Online (Sandbox Code Playgroud) 我们正在尝试设计一种能够处理超过 64k 个 websocket 的架构。
我们首先尝试使用 Amazon ELB,但它的设计不允许意外的流量激增或 websocket。(TCP 模式意外超时 websockets)
使用 HAProxy,这些限制不适用,但我们将被限制在 HA 和后端服务器之间维护的 ~64k websockets。
想到的多种解决方案:
有一个更好的方法吗 ?
domain-name-system scalability load-balancing haproxy websocket
我的单个主机上有多个游戏服务器 TCP 端口。目标是让用户能够连接到 server1.domain.net 并根据该子域进行定向。我的第一直觉写了以下内容,但后来我意识到 TCP 流量不会有任何要读取的标头。使用 HAProxy 1.5.8。我尝试使用多个后端、use_backend 和完整的 ACL 行做同样的事情,但得到了相同的结果(可以理解)。
listen game-listener
bind x.x.x.x:22222
mode tcp
use-server server1 if { hdr(host) -i server1.domain.net }
use-server server2 if { hdr(host) -i server2.domain.net }
server server1 localhost:22201 check
server server2 localhost:22202 check
Run Code Online (Sandbox Code Playgroud)
是否有像 hdr(host) 这样的检查可以用于 TCP 连接?还是我做得对,而游戏玩得不好?
谢谢!
我正在努力思考 haproxy 选项的方式
timeout http-request <timeout>
timeout http-keep-alive <timeout>
timeout server <timeout>
Run Code Online (Sandbox Code Playgroud)
彼此互动。我在位于 haproxy 负载均衡器后面的两个应用服务器上运行一个 Apache 网站。现在我没有启用 keep-alive,但我一直在尝试启用它,因为我认为它有助于优化网站。我的目标是为浏览器和 haproxy 之间的连接启用 keep-alive,但禁用 haproxy 和 apache 之间的 keep-alive。我用
option http-server-close
Run Code Online (Sandbox Code Playgroud)
现在我正在研究设置保持活动超时。我一直在研究超时 http-request 选项、超时 http-keep-alive 选项和超时服务器选项的haproxy 手册。如果我正确理解手册,超时 http-keep-alive 是在新请求之间保持连接打开的时间,超时 http-request 是在关闭连接之前等待响应标头的时间。但我似乎无法弄清楚的是超时服务器规定的内容。我想说超时服务器是等待完整响应的时间,但有人可以确认吗?如果我是对的,超时服务器是等待完整响应的时间,那么我是否正确,它不应该对保持活动超时设置有任何影响?
这是我正在修改的 haproxy 配置:
global
maxconn 4096
pidfile /var/run/haproxy.pid
daemon
defaults
mode http
retries 3
option redispatch
maxconn 5000
timeout connect 5000
timeout client 300000
timeout server 300000
listen HTTP *:80
mode http
cookie HTTP insert nocache
balance roundrobin
#option httpclose …Run Code Online (Sandbox Code Playgroud) 当第一个缺少文件时,如何使 HAProxy 重写到不同的后端?我需要的是errorloc进行重写而不是重定向,因此客户端不知道重定向。
我们开发了一个考虑到 NginX 的应用程序,它既是负载平衡反向代理,也是静态文件的 Web 服务器。应用程序基于Opa框架,该框架需要基于 cookie 的粘性会话 - NginX 和 HAproxy 都支持。我们遇到问题的应用程序功能是动态内容生成。它按需生成图像,但生成后将其保存在磁盘上,并且可以通过确定性路径静态访问。
问题很容易用 NginX 解决 - 它尝试读取本地文件并仅在文件丢失(尚未生成)时才使用负载平衡后端:
server {
server_name wkaliszu.pl;
location /thumb {
root /path_on_disk/to_cached_content;
expires 7d;
# try to access already generated content
try_files $uri @wkaliszu;
}
location / {
# reverse proxy to the application
[...]
}
location @wkaliszu {
# reverse proxy to the application
[...]
}
}
Run Code Online (Sandbox Code Playgroud)
服务器已迁移,现在使用 HAPproxy 进行负载均衡,它不是 Web 服务器,不支持此功能。现在每次客户端尝试访问资源时都会执行动态软件生成,这样会慢得多并且浪费资源。如果第一个(静态文件的简单缓存 Web 服务器)失败并显示错误 404,如果它可以使用下一个后端就好了,但我找不到一种简单的方法。重定向/thumb到 NginX,它尝试读取静态文件并再次使用新的 …
我需要使用两个不同的 SSL 证书配置 HAProxy
现在我从关于 serverfault 的帖子(在 Haproxy 中配置多个 SSL 证书)中了解到如何使用 2 个证书,但是服务器继续使用为两个域提到的第一个证书。
配置:
frontend apache-https
bind 192.168.56.150:443 ssl crt /certs/crt1.pem crt /certs/cert2.pem
reqadd X-Forwarded-Proto:\ https
default_backend apache-http
backend apache-http
redirect scheme https if { hdr(Host) -i www.example.com } !{ ssl_fc }
redirect scheme https if { hdr(Host) -i api.example.com } !{ ssl_fc }
...
Run Code Online (Sandbox Code Playgroud)
如何根据 URL 告诉 HAProxy 使用哪个证书?
完整配置:
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 …Run Code Online (Sandbox Code Playgroud) haproxy ×10
ssl ×2
tcp ×2
apache-2.2 ×1
centos6.4 ×1
gameserver ×1
hostname ×1
hosts ×1
https ×1
keep-alive ×1
keepalive ×1
keepalived ×1
lighttpd ×1
nginx ×1
proxy ×1
scalability ×1
stunnel ×1
timeout ×1
websocket ×1