我见过有人建议将所有这些组合在一个流程中,但它们似乎有很多重叠的功能,所以我想深入了解为什么您可能想要在访问实际 Web 服务器之前通过 3 个不同的程序。
nginx:
漆:
快乐代理:
将所有这些链接到您的主要 Web 服务器之前是否只是为了获得它们的一些主要功能优势?
让这么多守护进程一起做类似的事情似乎很脆弱。
您的部署和订购偏好是什么?为什么?
我有 haproxy 作为我的负载平衡器运行,并且从 haproxy 附带的 stats Web 界面,我可以将 Web 服务器置于维护模式(并再次将其恢复) - 这太棒了!
但是,我还希望能够从命令行执行相同的操作(用于某些自动部署工作流)。这可能吗,如果可以,怎么办?
非常感谢
我正在运行一个 HAProxy 负载平衡服务器来平衡多个 Apache 服务器的负载。我需要在任何给定时间重新加载 HAProxy 以更改负载平衡算法。
这一切都很好,除了我必须在不丢失单个数据包的情况下重新加载服务器(目前重新加载平均成功率为 99.76%,每秒 1000 个请求持续 5 秒)。我对此进行了很多小时的研究,并找到了以下用于“正常重新加载”HAProxy 服务器的命令:
haproxy -D -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid)
Run Code Online (Sandbox Code Playgroud)
然而,与普通的旧版相比,这几乎没有影响service haproxy reload,它仍然平均下降了 0.24%。
有没有办法在没有任何用户丢包的情况下重新加载 HAProxy 配置文件?
我不知道如何为 HAProxy 设置统计信息。
这是我的配置:
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
daemon
#debug
user haproxy
group haproxy
maxconn 4096
stats socket /tmp/haproxy
defaults
log global
mode tcp
option tcplog
option dontlognull
option redispatch
option clitcpka
option srvtcpka
option tcpka
retries 3
maxconn 2000
contimeout 10000
clitimeout 50000
srvtimeout 50000
stats enable
stats hide-version
stats scope .
stats realm Haproxy\ Statistics
stats uri /haproxy?stats
stats auth xxxxx:xxxxx
option contstats
listen rtmp :1935
mode tcp
balance roundrobin
server s1 xxx.xxx.xxx.xxx:1935 check …Run Code Online (Sandbox Code Playgroud) 我的 haproxy 实例服务于 2 个域(主要是为了避免主站点上的 XSS)。
规则看起来像这样
bind :443 ssl crt /etc/ssl/haproxy.pem
acl is_static hdr_end(Host) -i example.com
acl is_api hdr_end(Host) -i api.example.com
acl is_files hdr_end(Host) -i example.io
redirect scheme https if !{ ssl_fc } is_static is_api
Run Code Online (Sandbox Code Playgroud)
现在 SSL/etc/ssl/haproxy.pem用作默认证书,它是example.com而非的证书example.io。
如何为多个域名指定证书?
配置 HA 代理时,您如何决定为超时分配哪些值?我在各种博客中阅读了六个示例,每个人都使用不同的超时时间,但没有人讨论原因。
HAProxy 似乎特别担心客户端、连接和服务器,如果您完全未设置,HAPRoxy 会发出警告:
While not properly invalid, you will certainly encounter various problems
with such a configuration. To fix this, please ensure that all following
timeouts are set to a non-zero value: 'client', 'connect', 'server'.
Run Code Online (Sandbox Code Playgroud)
该文档在这方面没有帮助:它建议“略高于 3 秒的倍数”,但不是为什么您要选择 1 对 100 或 42 的倍数。
我使用的 RPM(Amazon Linux 存储库)设置了这些默认值:
timeout connect 10s
timeout client 1m
timeout server 1m
Run Code Online (Sandbox Code Playgroud)
其中两个是3 秒的精确倍数,违反了我见过的唯一官方建议。
如果您没有具体的调整建议,也许一个更简单的问题是:如果超时很短或很长,我应该会出现什么问题?
我使用本文中的提示通过 rsyslogd 设置了 haproxy 日志记录,并且一切似乎都运行良好。日志文件获取日志消息。
但是,来自 haproxy 的每条日志消息也会显示在/var/log/syslog. 这意味着一旦服务器上线,系统日志将毫无用处,因为它会被 haproxy 日志消息覆盖。
我想从/var/log/syslog. 在查看 rsyslogd 文档后,我尝试更改文件/etc/rsyslog.d/50-default.conf:
*.*;auth,authpriv.none;haproxy.none -/var/log/syslog
Run Code Online (Sandbox Code Playgroud)
我只是添加了;haproxy.none部分。重新启动 rsyslogd 后,它完全停止工作,直到我恢复更改。
我究竟做错了什么?
HAProxy 能够在客户端(客户端 <-> HAProxy)启用 HTTP 保持活动,但在服务器端(HAProxy <-> 服务器)禁用它。
我们的一些客户通过卫星连接到我们的网络服务,因此延迟约为 600 毫秒,我认为通过启用保持活动,它会加快速度。我对吗?
这是 Nginx 支持的吗?这是其他软件和硬件负载平衡器中广泛实现的功能吗?除了HAProxy还有什么?
HAProxy 和 Nginx 在作为反向代理的能力方面有什么区别?
关于 HAProxy reqrep 的真正快速问题。我正在尝试重写/替换发送到后端的请求。
我有以下示例域和 URI,它们共享相同的域名,但后端 Web 服务器池不同。
http://domain/web1
http://domain/web2
Run Code Online (Sandbox Code Playgroud)
我希望 web1 转到后端 webfarm1,而 web2 转到 webfarm2。目前这确实发生了。但是,当请求发送到后端时,我想去掉 web1 或 web2 URI。
这是我的 haproxy.cfg
frontend webVIP_80
mode http
bind :80
#acl routing to backend
acl web1_path path_beg /web1
acl web2_path path_beg /web2
#which backend
use_backend webfarm1 if web1_path
use_backend webfarm2 if web2_path
default_backend webfarm1
backend webfarm1
mode http
reqrep ^([^\ ]*)\ /web1/(.*) \1\ /\2
balance roundrobin
option httpchk HEAD /index HTTP/1.1\r\nHost:\ example.com
server webtest1 10.0.0.10:80 weight 5 check slowstart 5000ms
server …Run Code Online (Sandbox Code Playgroud)