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

如何配置Docker Compose搭建Nginx+Lumen微服务API并实现公网隔离

docker-compose.yml 配置实现方案

核心实现逻辑

通过Docker网络隔离实现访问控制规则:

  • 定义两类Docker网桥:对外接入网桥 用于API网关暴露公网端口,纯内部隔离网桥 用于微服务、数据库之间的内部通信,内部网络开启internal: true属性,完全禁止公网访问
  • API网关同时接入两类网络,既能接收公网请求,也能转发请求到内部微服务
  • 所有Lumen微服务、数据库仅接入内部隔离网络,不映射任何端口到宿主机,公网无法直接访问

完整docker-compose.yml配置

version: '3.8'

services:
  # Nginx API网关
  nginx-gateway:
    image: nginx:1.25-alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      # 挂载网关Nginx配置文件
      - ./gateway/nginx/conf.d:/etc/nginx/conf.d
      # 挂载SSL证书
      - ./gateway/ssl:/etc/nginx/ssl
    networks:
      - public-network
      - internal-network
    depends_on:
      - lumen-user-service
      - lumen-order-service
    restart: unless-stopped

  # Lumen用户微服务示例(其他微服务配置逻辑完全一致)
  lumen-user-service:
    build: ./services/user
    # 不需要配置ports端口映射,仅内部网络可访问
    volumes:
      - ./services/user:/var/www/html
    networks:
      - internal-network
    depends_on:
      - mysql
    restart: unless-stopped

  # Lumen订单微服务示例
  lumen-order-service:
    build: ./services/order
    volumes:
      - ./services/order:/var/www/html
    networks:
      - internal-network
    depends_on:
      - mysql
    restart: unless-stopped

  # MySQL数据库
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: your_secure_root_password
      MYSQL_DATABASE: app_db
      MYSQL_USER: app_user
      MYSQL_PASSWORD: your_secure_user_password
    # 不需要配置ports端口映射,仅内部网络可访问
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - internal-network
    restart: unless-stopped

# 数据卷配置,持久化数据库数据
volumes:
  mysql-data:

# 网络配置
networks:
  # 对外网络,仅网关接入
  public-network:
    driver: bridge
  # 内部隔离网络,所有微服务、数据库接入
  internal-network:
    driver: bridge
    # 核心配置:标记为内部网络,禁止公网进出访问
    internal: true

配置注意事项

  • Nginx网关的反向代理配置直接使用微服务的服务名作为域名即可,Docker内置DNS会自动解析到对应容器的内部IP,示例配置:proxy_pass http://lumen-user-service:9000;
  • 所有内部服务严禁添加ports配置项,避免端口映射到宿主机导致公网可访问
  • 微服务之间的内部调用也可直接通过内部网络的服务名调用,不需要绕API网关

内容的提问来源于stack exchange,提问作者Donny Akhmad Septa Utama

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:24:02