我正在尝试学习如何使用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有问题。任何建议都非常感激。
答案 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