标签: haproxy

在特定IP地址上发布Docker Swarm服务

在 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 docker ipvs docker-swarm

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

具有 HAProxy 和同一 IP 上的虚拟主机的直通 SSL

我可以使用 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 时)而不会出现安全问题吗?

ssl haproxy

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

HAProxy - 动态更新 SSL 证书而无需重新加载

目前,我们使用 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设置的值),我猜测有一个假设需要重新加载。

如果有人有引用来证实这一假设,我将不胜感激。

ssl haproxy

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

HAProxy 可以生成基于 UUID 的唯一连接 ID 吗?

我有一个 HAProxy 负载均衡器,我想用它来标记具有唯一 id(X-Unique-ID 标头)的请求,以便我可以关联多个系统中的日志之间的事件。

HAProxy 具有使用指令执行此操作的功能unique-id-format。文档解释说,这仅使用日志系统中的语法,并继续建议您使用客户端和服务器 IP 地址、时间戳等内容来构建可能唯一的内容。

我想知道是否可以为每个请求生成一个随机(版本 4)UUID(或类似的东西),而不是生成具有潜在敏感客户端信息(如 IP 地址和请求时间)的 UUID。

haproxy uuid uniqueidentifier

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

决定软件负载平衡解决方案(apache mod 与其他)

我有一个带有 Apache 网络服务器和 Tomcat 的简单网络服务器配置。例如,我们有 2 台服务器。我打算扩大规模。当然,我们很快就会需要一个负载平衡解决方案。我应该使用 Apache 将 Tomcat 服务器置于前端以进行负载平衡还是使用其他东西?

对于 apache 服务器,我是否应该使用一些外部软件(例如 HaProxy)来进行负载平衡,而不是使用 mod_proxy_http 来进行负载平衡?当您在 Linux env 中搜索负载平衡时。你找到了很多 Haproxy 的东西,但没有找到 Apache 服务器,为什么!?

谢谢你!

tomcat load-balancing haproxy apache-2.2

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

用于平衡 URL 请求的 Haproxy ACL

我使用 Ubuntu 和 haproxy 1.4.13 版本。

它的负载均衡两个子域:

  • app1.domain.com
  • app2.domain.com

现在我希望能够使用 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)

load-balancing access-control-list haproxy

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

将 HAProxy 健康检查请求作为用户代理“LB-Check”传递到后端网络服务器 (apache)

我在 Apache 网络服务器前面有一个 HAProxy 设置用于负载平衡。这些网络服务器的健康检查也在 HAProxy 中配置。

option httpchk  HEAD /healthcheck.txt HTTP/1.0
Run Code Online (Sandbox Code Playgroud)

是否有可能转移这些健康检查请求到后端的Web服务器LB-CheckUser-agent或任何其他选项,这样我可以从其他的日志条目区分开来?

(我不想dontlog选择“选项,因为我不想错过这些条目。)

haproxy apache-2.2

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

HAProxy 负载平衡后端 - 一台服务器关闭时的行为

我的理解是,通过 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)

linux load-balancing haproxy

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

haproxy 可以使用变音域吗?

我在一台服务器上托管多个网页。

对于路由,我使用 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 可以处理变音域吗?如何?

domain-name-system haproxy idn

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

HAProxy 不保持活动的 http 连接

我已经打开option http-keep-alive了默认设置,并在前端定义中尝试了它。

但是浏览器中的响应标头永远不会显示保持活动状态,尽管它存在于浏览器的请求标头中。使用 Chrome 作为浏览器。

haproxy 的后端是 apache 2.4 + php-fpm。HAProxy 1.5.3 版

谢谢

http haproxy keep-alive

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