You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Docker Swarm中配置HAProxy通过SSL自动路由流量到复制服务

配置修正方案

现有配置的核心问题

  • docker-compose.yml 配置错误
    • HAProxy 挂载的 haproxy.cfg 使用了命名卷而非本地文件挂载,你本地修改的配置无法同步到容器内
    • HAProxy 端口映射逻辑与内部监听端口不匹配,同时未挂载SSL证书文件
    • node-server 不需要映射8080端口到宿主机,集群内通过overlay网络可直接通信
  • haproxy.cfg 配置错误
    • 前端监听端口与docker-compose映射的容器端口不匹配,未配置SSL证书加载逻辑
    • 后端地址写死为127.0.0.1:8000,无法指向Swarm集群内的node-server服务,也适配不了多副本的服务发现
    • 未适配node-server本身是HTTPS服务的特性,后端请求需要兼容HTTPS协议

调整后的配置

1. 前置准备

将你的SSL证书(公钥+私钥合并为单个PEM格式文件)放在manager节点的配置目录下,命名为haproxy.pem,和docker-compose.yml、haproxy.cfg存放在同一目录。

2. 修改后的docker-compose.yml

version: '3.9'

services:
  proxy:
    image: haproxy:latest
    ports:
      - 443:443
    volumes:
      # 本地配置文件挂载到容器内
      - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
      # SSL证书挂载
      - ./haproxy.pem:/etc/haproxy/certs/haproxy.pem
    deploy:
      placement:
        constraints: [node.role == manager]
    networks:
      - servers-network
  node-server:
    image: glusk/hackathon-2021:latest
    command: npm run server
    deploy:
      mode: replicated
      replicas: 2
    networks:
      - servers-network
networks:
  servers-network:
    driver: overlay
    # 开启服务发现自动解析
    attachable: true

3. 修改后的haproxy.cfg

global
    daemon
    maxconn 256
    # 配置SSL证书默认加密套件
    ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384

defaults
    mode http
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms

frontend https-in
    # 绑定443端口并加载SSL证书
    bind *:443 ssl crt /etc/haproxy/certs/haproxy.pem
    default_backend servers

backend servers
    # 后端服务走HTTPS协议,node-server为自签证书时添加verify none跳过校验,可信证书可删除该参数
    server-template node-server 2 node-server:8080 check ssl verify none maxconn 32

部署操作

  1. 登录manager节点,确认三个配置文件(docker-compose.yml、haproxy.cfg、haproxy.pem)都在当前目录
  2. 先删除之前错误部署的栈:
docker stack rm hackathon-2021
  1. 等待10秒左右资源释放后重新部署:
docker stack deploy --compose-file=docker-compose.yml hackathon-2021
  1. 验证服务状态:
# 查看栈服务状态
docker stack services hackathon-2021
# 查看HAProxy日志确认无报错
docker logs -f $(docker ps -q -f name=hackathon-2021_proxy)

内容的提问来源于stack exchange,提问作者Janez Kuhar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 15:45:08