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

如何在Docker Compose中通过网络层为URL路径添加前缀?

实现方案:通过反向代理添加URI前缀

完全可行,我们可以在docker-compose中引入反向代理(以Nginx为例),通过路径重写规则在网络层完成URI前缀的添加,无需修改任何应用代码,完美复现EKS环境下的路由逻辑。

具体步骤

1. 创建Nginx配置文件

在项目目录下新建docker/nginx文件夹,创建nginx.conf文件,配置路径重写规则:

server {
    listen 80;

    # 处理带/service前缀的请求
    location /service {
        # 去掉/service前缀后转发到service-api服务的9000端口
        rewrite ^/service(.*)$ $1 break;
        proxy_pass http://service-api:9000;
        # 传递必要的请求头,保证应用能正确处理请求
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

2. 修改docker-compose.yml

添加Nginx服务,将原本映射到service-api的9000端口改为映射到Nginx的80端口:

version: '3.0'
services:
  neo4j:
    container_name: ${SERVICE_NAME:-service-api}-neo4j-${BUILD:-local}-${GIT_HASH}
    image: neo4j:${NEO4J_VERSION:-4.4.8-enterprise}
    volumes:
      - ./docker/neo4j/plugins:/plugins
      - ./docker/neo4j/conf:/conf
      - ./docker/neo4j/import:/import
    environment:
      NEO4J_AUTH: neo4j/pass
      NEO4J_dbms_logs_debug_level: DEBUG
      NEO4J_ACCEPT_LICENSE_AGREEMENT: "yes"
    ports:
      - "17687:7687"
      - "17474:7474"
    networks:
      - ${SERVICE_NAME:-service-api}

  service-api:
    container_name: ${SERVICE_NAME:-service-api}-${BUILD:-local}-${GIT_HASH}
    build:
      args:
        SERVICE_NAME: ${SERVICE_NAME:-service-api}
      context: ./docker/${SERVICE_NAME:-service-api}
      dockerfile: Dockerfile
    restart: on-failure
    depends_on:
      - neo4j
    environment:
      SPRING_PROFILES_ACTIVE: local
    # 不再对外暴露端口,仅在内部网络提供服务
    networks:
      - ${SERVICE_NAME:-service-api}

  nginx:
    container_name: ${SERVICE_NAME:-service-api}-nginx-${BUILD:-local}-${GIT_HASH}
    image: nginx:alpine
    volumes:
      - ./docker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
    ports:
      - "9000:80"
    depends_on:
      - service-api
    networks:
      - ${SERVICE_NAME:-service-api}

networks:
  service-api:
    driver: bridge

3. 测试验证

启动所有服务后,访问http://localhost:9000/service/api即可正常访问原API接口;直接访问http://localhost:9000/api会返回404,符合生产环境的路由规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 07:13:20