我最近接管了一个使用 HAProxy 的环境,我正在尝试了解配置及其含义,但我发现它的某些方面不清楚。
我认为上面的意思是,如果主机头以“foo.bar.com”开头,则使用 cdn cdn_name,但我不完全确定。有人可以为我确认吗?
谢谢!
我正在尝试设置一个测试 haproxy 服务器,它将涵盖 2 个基本领域。如果用户使用 http 但仅当特定 uri 部分不存在时自动重定向到 https。
例如,如果用户访问http://www.test.com,他们将被重定向到https://www.test.com。但是如果用户访问https://www.test.com/blog或http://www.test.com/blog ,他们将被重定向到http://www.test.com/blog。
这是我当前的测试 haproxy.cfg。我正在运行 haproxy 1.5-dev17
非常感谢您对此的任何帮助。
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
maxconn 15000
user haproxy
group haproxy
defaults
log global
mode http
option httplog
option dontlognull
option abortonclose
option http-server-close
option redispatch
retries 3
timeout queue 600s
timeout connect 9s
timeout client 60s
timeout server 60s
balance roundrobin
# Set up application listeners here.
frontend incoming …Run Code Online (Sandbox Code Playgroud) 1.5 版中的新http-response add-header指令是该指令。正如文档中所写的那样- 这可以用于frontend,backend和listen。
我在一个frontend部分中尝试做的事情:
use_backend some_backend if some_condition
http-response add-header Vary Origin if some_condition
Run Code Online (Sandbox Code Playgroud)
但这没有效果。放置在该backend部分中的同一行工作得很好。有人可以帮助我理解,我在这里缺少什么吗?我不明白,为什么这在该frontend部分不起作用。
My guess would be that within the fronted there is no response yet and so the directive fails. I tried using it before and after die use_backend directive.
在 Ubuntu 14.04 x64 服务器上,Haproxy 使用 3.3 GB 内存和 6.8 GB 交换,同时处理 52k 连接。在大部分流量被重定向到另一个 haproxy 框之前,CPU 使用率也一直飙升至 100%。流量主要是持久性 TCP 连接。
pid = 3185 (process #1, nbproc = 1)
uptime = 0d 6h14m21s
system limits: memmax = unlimited; ulimit-n = 524341
maxsock = 524341; maxconn = 262144; maxpipes = 0
current conns = 54303; current pipes = 0/0
Running tasks: 1/54336
Run Code Online (Sandbox Code Playgroud)
注意到内存使用量在大约 50k 连接时急剧上升。ulimit -n设置为1048576。
问题:内存使用量是否异常高?我们怎样才能减少内存消耗?
我还从另一个问题中阅读了以下内容,是否相关?我应该如何检查 TCP 设置是否足够(对于持久 TCP 连接),以免导致内存使用量大幅增加?
At 54000 concurrent connections, you …Run Code Online (Sandbox Code Playgroud) 我试图让 HAproxy 1.5.x 信任机器 ( /etc/ssl/certs)信任存储中已有的任何证书颁发机构,而无需明确指定ca-file要信任的单个根颁发机构证书。我想避免给定后端服务器使用由不同机构颁发的证书并导致中断的情况,因为该后端服务器不再受信任——尽管 CA 位于机器信任存储中。
在文件的给定backend部分中haproxy.cfg,该server行有一个名为ca-file. 此选项指示 HAproxy 使用提供的权限验证后端服务器证书的权限。问题是这指向单个 CA。
我找到了这个ca-base选项。除非我弄错了,否则这只是避免必须ca-file在每个声明中指定完整路径的快捷方式。
我们目前在 Ubuntu AWS 集群上验证 Comodo SSL 证书时遇到问题。浏览器很好地显示了站点/内容并显示了所有相关的证书信息(至少是我们检查过的所有信息),但某些网络代理和在线 SSL 检查器显示我们有一个不完整的链。
我们尝试了以下方法来尝试解决此问题:
“.pem”文件使用 openssl 验证是否正常。各种中间证书和根证书已安装并显示在 /etc/ssl/certs 中。但是支票仍然带有不完整的链条。
任何人都可以建议我们可以检查的其他任何内容或我们可以尝试解决此问题的任何其他更改吗?
提前谢谢了...
更新:来自 haproxy.cfg(我相信)的唯一相关行是这个:
bind *:443 ssl crt /etc/ssl/domainaname.com.pem
Run Code Online (Sandbox Code Playgroud)
更新 2:输出openssl s_client
CONNECTED(00000003)
depth=0 OU = Domain Control Validated, OU = COMODO SSL, CN = www.domainname.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 OU = Domain Control Validated, OU = COMODO SSL, CN = www.domainname.com
verify error:num=27:certificate not trusted
verify return:1 …Run Code Online (Sandbox Code Playgroud) 通过 systemctl 运行 haproxy 与手动运行它不同。
这是通过 systemctl 启动时的输出:
> sudo systemctl status -l haproxy.service
haproxy.service - HAProxy Load Balancer
Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled)
Active: active (running) since Wed 2014-12-24 08:08:49 EST; 4min 59s ago
Main PID: 20307 (haproxy)
CGroup: /system.slice/haproxy.service
??20307 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
Dec 24 08:08:49 localhost.localdomain systemd[1]: Starting HAProxy Load Balancer...
Dec 24 08:08:49 localhost.localdomain systemd[1]: Started HAProxy Load Balancer.
Run Code Online (Sandbox Code Playgroud)
像这样,haproxy 只对我的后端说 503。
如果我现在停止 haproxy 服务,而是在命令行上手动运行它,如下所示:
sudo /usr/sbin/haproxy …Run Code Online (Sandbox Code Playgroud) 我目前在亚马逊 ELB 前使用 Haproxy-1.6-dev2,我遇到了 DNS 解析问题。由于新resolvers功能,我正在使用 haproxy 的开发版本,但无法让 Haproxy 在不重新启动 haproxy 进程的情况下触发服务器内部 IP 地址列表的更改。Amazon 更新其 ELB 的 IP,而 Haproxy 继续使用旧 IP 地址而不更新。下面是一个简化的配置文件。
global
log 127.0.0.1 local0
stats socket /var/run/haproxy.sock
defaults
log global
mode http
option httpchk GET /
option log-health-checks
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
resolvers dns
nameserver public-0 xx.xx.xx.xx:53
hold valid 1s
frontend http
bind *:8000
default_backend site-backend
backend site-backend
balance leastconn
server site sub.example.com:80 resolvers dns check inter 1000
Run Code Online (Sandbox Code Playgroud)
我在 …
我正在使用以下配置为两个 Tomcat 服务器执行负载平衡。我将 HAProxy 配置为执行 SSL/TLS 桥接/重新加密。
#------------------------------------------------- --------------------
# 可能的 Web 应用程序的示例配置。见
# 在线完整配置选项。
#
# http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#------------------------------------------------- --------------------
#------------------------------------------------- --------------------
# 全局设置
#------------------------------------------------- --------------------
全球的
# 要让这些消息最终出现在 /var/log/haproxy.log 中,您将
# 需要:
#
# 1) 配置syslog 以接受网络日志事件。这个做完了
# 通过在 SYSLOGD_OPTIONS 中添加“-r”选项
# /etc/sysconfig/syslog
#
#2) 配置local2事件到/var/log/haproxy.log
# 文件。可以添加如下一行
# /etc/sysconfig/syslog
#
# local2.* /var/log/haproxy.log
#
日志 127.0.0.1 local2 调试
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
最大康 4000
用户haproxy
组haproxy
守护进程
# 打开 stats unix 套接字
统计套接字/var/lib/haproxy/stats
ssl-server-verify 无
#------------------------------------------------- -------------------- … 我在多主设置中设置了一个由 3 个 MariaDB 服务器组成的集群,它运行良好。我为 HaProxy 添加了第 4 个服务器以进行负载平衡和循环,以便我们可以有一点冗余,这也可以正常工作,除了 1 个问题。
我登录到运行以下查询的 HaProxy 服务器上的 MySQL 客户端:
show variables like 'server_id';
Run Code Online (Sandbox Code Playgroud)
我正在获取结果,但是如果我等待 5 秒或更长时间并再次运行查询,我会收到以下错误:
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 52
Current database: *** NONE ***
Run Code Online (Sandbox Code Playgroud)
在那之后,我得到了不同 server_id 的结果,这表明负载平衡正在工作。这导致的问题是,当我尝试从 Spring/Java 应用程序连接时,我可以在短时间内运行查询并且连接断开。我想如果我可以在 HaProxy 服务器上解决它,那将解决我遇到的其他问题。
编辑:添加 HAPROXY.CFG
global
log 127.0.0.1 local0 notice
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
user haproxy
group haproxy
maxconn 4096
daemon
defaults
log global
retries 2
timeout connect 3000
timeout server 5000 …Run Code Online (Sandbox Code Playgroud)