使用Docker进行HA代理简单转发

时间:2018-06-14 17:15:37

标签: linux docker proxy haproxy

我正在尝试学习如何使用HA代理转发http流量。为了开始,我想我会使用Docker并且卡住了。

尝试执行的转发流量看起来像这样

ha-proxy container port 81
>>> forward to
nginx container port 8088

当我使用网址http://localhost:81/从我的浏览器加载ha代理容器时,我得到的错误消息是

503 Service Unavailable No server is available to handle this request.

  

我的设置如下所示。

nginx - 容器

当我加载http://localhost:8088/时,我会收到正确的Welcome to nginx!主页。

Docker命令我正在使用它。我使用--net=host因此它将它绑定到主机网络。

docker run --name myapp-backend -p 8088:80 -d --net=host  nginx:1.15.0-alpine  

Ha代理

Dockerfile

FROM haproxy:alpine
COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg

haproxy.cfg

global
    log 127.0.0.1 local0
    maxconn 4096

defaults
    log global
    mode http
    option httplog
    option dontlognull
    retries 3
    redispatch
    maxconn 2000
    contimeout 5000
    clitimeout 50000
    srvtimeout 50000

frontend http-in
    bind *:81
    acl myapp-frontend hdr(host) -i localhost
    use_backend myapp-backend if myapp-frontend

backend myapp-backend
    balance roundrobin
    option http-server-close
    server myapp-server-1 localhost:8088 check

启动HA代理

   docker build -t rob-haproxy .
   docker run --name ha-proxy -p 81:81  --net=host -d rob-haproxy

我的想法是我的ha代理配置文件haproxy.cfg有问题。任何建议都非常感激。

2 个答案:

答案 0 :(得分:1)

您无法在haproxy配置文件中使用localhost。对于haproxy,localhost表示my container,而不是您的主机。而是localhost,使用nginx的docker服务或容器名称。当然,将两个容器放在同一个docker网络中。

答案 1 :(得分:0)

根据Miq的建议,我沿着将其添加到自己的docker网络的路线走了下来。然而,这本身还不够,所以我也简化了ha配置。

以下是现在的样子

global
  quiet

defaults
  mode http
  maxconn 5000

  timeout connect 5s
  timeout client  20s
  timeout server  20s

frontend public
    bind *:81
    default_backend apps

backend apps
    server myapp-backend myapp-backend:80 check

的bash

docker network create elk || true
docker run --name myapp-backend -p 8088:80 -d --net=elk  nginx:1.15.0-alpine
docker run --name rob-haproxy -p 81:81 --net=dev-d rob-haproxy-image