在 Centos 7.4 上,我正在设置一个群,我想在其中运行多个可在端口 80/443 上访问的路由器。
目的是在单个集群上托管多个环境(测试/登台...),所有环境都是对称的。
我使用 Docker 17.12.0-ce 和 Traefik v1.4.6 作为路由器。
基本思想是每个环境都有一个虚拟 IP 地址,并仅在该地址上发布 Traefik 端口。这对于 Docker swarm 来说是不可能的,所以我必须让 Traefik 实例监听端口 81/82 等,并以某种方式将流量从 VIP:80 带到 :81/:82。
集群管理器中所有环境的虚拟 IP 地址均由 Keepalived 处理。
Traefik 的相关 docker 服务配置:
"Ports": [
{
"Protocol": "tcp",
"TargetPort": 80,
"PublishedPort": 81,
"PublishMode": "ingress"
},
# netstat -anp|grep 81
tcp6 7 0 :::81 :::* LISTEN 4578/dockerd
Run Code Online (Sandbox Code Playgroud)
firewalld 设置为允许流量到达端口 80、81、82 等
直接在 VIP 上的 81 端口访问 Traefik 公开的后端服务是可行的。
在未正确配置任何内容的情况下访问 VIP 上的 80 端口会导致连接被拒绝
Traefik docker 实例运行在我用于以下测试的同一主机上。 …
我可以使用 HAProxy 将 SSL 传递到与其他虚拟主机共享 IP 的虚拟主机吗?
我尝试
frontend https
bind *:443 #ssl
mode tcp
default_backend port_443
backend port_443
mode tcp
server web42 www.example.com
Run Code Online (Sandbox Code Playgroud)
但我看到默认的网络服务器,而不是 www.example.com
我可以在前端执行 SNI,但是如何对后端说 - 这是针对 www.example.com 域的?
server web1 www.example.com:443 sni str(www.example.com) verify none
Run Code Online (Sandbox Code Playgroud)
也不行。
为了明确起见,网络服务器 www.default.com、www.example.com、www.example.net 都具有相同的 IP 和端口,例如 10.0.1.10:443 Apache/ngix 使用 SNI 选择正确的虚拟主机。
问题仍然没有解决。这里有一些图形
--------------------
|(All 10.0.1.10:443)
www2.example.com:443 -> HaProxy ->|www.default.com <- Apache vhost default
|www.example.com
|www.example.net
--------------------
Run Code Online (Sandbox Code Playgroud)
我想访问 www.example.com(使用 tcp 模式)
如果我有 www.example.com 和 www.example.net 的私钥。我可以访问 www.example.net (当用户输入 www.example.com 时)而不会出现安全问题吗?
目前,我们使用 HAProxy 来管理数千个域的 TLS 终止,所有这些域都有定期轮换的 Let's Encrypt 证书。
相关配置如下所示:
frontend https-in
bind *:443 ssl strict-sni no-sslv3 crt /usr/src/data/certs/
Run Code Online (Sandbox Code Playgroud)
并且/usr/src/data/certs/充满了一堆 .pem 文件。
SSL 证书一直在变化,因为它们单独需要续订,或者新域从我们的系统中添加/删除。现在,我们通过将所有证书批量写入/usr/src/data/certs/并执行 haproxy 的零停机重新加载来解决这个问题。这很麻烦,因为我们在重新加载期间会出现非常大的内存峰值,因为新实例会读取完整的证书负载,而旧实例会继续运行。
我们目前正在研究 HAProxy Unix Socket 命令的一些功能,并了解我们可以动态化的许多功能(ACL、映射等)。我想知道我们是否可以采取类似的方法来同步证书并避免不断的重新加载行为。
使用 HAProxy 1.9 进行实验,但我们并未为此选择任何特定版本。感谢您的任何帮助或建议!
更新我看到了bind 有关通过数据平面 API
进行操作的文档,但它没有明确指示如何或何时获取这些更改。由于它包含用于强制重新加载的布尔值(或默认为reload-delay设置的值),我猜测有一个假设需要重新加载。
如果有人有引用来证实这一假设,我将不胜感激。
我有一个 HAProxy 负载均衡器,我想用它来标记具有唯一 id(X-Unique-ID 标头)的请求,以便我可以关联多个系统中的日志之间的事件。
HAProxy 具有使用指令执行此操作的功能unique-id-format。文档解释说,这仅使用日志系统中的语法,并继续建议您使用客户端和服务器 IP 地址、时间戳等内容来构建可能唯一的内容。
我想知道是否可以为每个请求生成一个随机(版本 4)UUID(或类似的东西),而不是生成具有潜在敏感客户端信息(如 IP 地址和请求时间)的 UUID。
我有一个带有 Apache 网络服务器和 Tomcat 的简单网络服务器配置。例如,我们有 2 台服务器。我打算扩大规模。当然,我们很快就会需要一个负载平衡解决方案。我应该使用 Apache 将 Tomcat 服务器置于前端以进行负载平衡还是使用其他东西?
对于 apache 服务器,我是否应该使用一些外部软件(例如 HaProxy)来进行负载平衡,而不是使用 mod_proxy_http 来进行负载平衡?当您在 Linux env 中搜索负载平衡时。你找到了很多 Haproxy 的东西,但没有找到 Apache 服务器,为什么!?
谢谢你!
我使用 Ubuntu 和 haproxy 1.4.13 版本。
它的负载均衡两个子域:
现在我希望能够使用 ACL 根据url 请求发送到正确的后端 例如:
http://app1.domain.com/path/games/index.php sould be send to backend1
http://app1.domain.com/path/photos/index.php should be send to backend2
http://app2.domain.com/path/mail/index.php sould be send to backend3
http://app2.domain.com/path/wazap/index.php should be send to backend4
Run Code Online (Sandbox Code Playgroud)
我确实使用了以下 acl 的代码
frontend http-farm
bind 0.0.0.0:80
acl app1web hdr_beg(host) -i app1 # for http://app1.domain.com
acl app2web hdr_beg(host) -i app2 # for http://app2.domain.com
acl msg-url-1 url_reg ^\/path/games/.*
acl msg-url-2 url_reg ^\/path/photos/.*
acl msg-url-3 url_reg ^\/path/mail/.*
acl msg-url-4 url_reg ^\/path/wazap/.*
use_backend …Run Code Online (Sandbox Code Playgroud) 我在 Apache 网络服务器前面有一个 HAProxy 设置用于负载平衡。这些网络服务器的健康检查也在 HAProxy 中配置。
option httpchk HEAD /healthcheck.txt HTTP/1.0
Run Code Online (Sandbox Code Playgroud)
是否有可能转移这些健康检查请求到后端的Web服务器LB-Check,User-agent或任何其他选项,这样我可以从其他的日志条目区分开来?
(我不想dontlog选择“选项,因为我不想错过这些条目。)
我的理解是,通过 HAProxy 对两个服务器后端进行负载平衡,如果其中一个出现故障,HAProxy 应该能够将所有流量定向到另一个。
我有两个负载均衡的网络服务器,带有 roundrobin 和 httpchk,但是当一个服务器出现故障时,我会503 - Service unavailable从 HAProxy收到消息。也许我的配置有问题?
backend app
timeout server 50000ms
mode http
balance roundrobin
option httpchk
server ap1 ap1:8000 maxconn 4000 #ap1 is hostname
server ap2 ap2:8000 maxconn 4000 #ap2 is hostname
Run Code Online (Sandbox Code Playgroud) 我在一台服务器上托管多个网页。
对于路由,我使用 haproxy。
现在,一个有趣的用户想要一个变音域“supportbär.de”。
#haproxy.cfg
frontend http-in
..
acl is_supportbaer hdr_dom(host) -i supportbär
use_backend supportbaer_wp if is_supportbaer
Run Code Online (Sandbox Code Playgroud)
通常,这是有效的。但在这种情况下,不使用后端“supportbaer_wp”。
haproy 可以处理变音域吗?如何?
我已经打开option http-keep-alive了默认设置,并在前端定义中尝试了它。
但是浏览器中的响应标头永远不会显示保持活动状态,尽管它存在于浏览器的请求标头中。使用 Chrome 作为浏览器。
haproxy 的后端是 apache 2.4 + php-fpm。HAProxy 1.5.3 版
谢谢
haproxy ×10
apache-2.2 ×2
ssl ×2
docker ×1
docker-swarm ×1
http ×1
idn ×1
ipvs ×1
keep-alive ×1
linux ×1
tomcat ×1
uuid ×1