如何在Docker中配置后端仅允许前端访问,禁止外部调用
配置方案:让后端仅对前端容器开放
一、先修正Docker Compose配置(核心)
你当前的docker-compose.yml里有格式错误,而且错误配置会导致后端端口暴露到主机,按下面修改:
services: server: container_name: server image: server build: context: ./server dockerfile: Dockerfile volumes: - ./server:/server # 和后端Dockerfile的WORKDIR /server对应,之前的/app路径不匹配 # 删除原错误的expose配置,也不要加ports字段 # 这样后端3000端口仅在Docker内部网络开放,外部完全无法直接访问 client: container_name: commerce image: commerce build: context: ./ dockerfile: Dockerfile volumes: - ./commerce:/app # 和前端Dockerfile的WORKDIR /app对应 ports: - 8080:80 depends_on: - server
关键说明:
- Docker Compose会自动给所有服务创建专属内部网络,同网络内的容器可以通过服务名(比如
server)互相访问。 - 不给
server配置ports,后端的3000端口就不会映射到你的主机,Postman、浏览器直接访问localhost:3000会失败,只有前端容器能通过server:3000访问后端。
二、配置Nginx反向代理(解决跨域+隐藏后端地址)
前端代码直接写http://server:3000会触发跨域报错(浏览器会把server当成主机域名解析),需要让Nginx帮前端转发请求:
- 在前端项目根目录新建
nginx.conf文件:
server { listen 80; server_name localhost; root /usr/share/nginx/html; index index.html; # 处理Angular单页应用的路由跳转 location / { try_files $uri $uri/ /index.html; } # 所有/api开头的请求自动转发到后端 location /api { proxy_pass http://server:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
- 修改前端Dockerfile,替换默认Nginx配置:
FROM node:lts-alpine as build-stage WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build # production stage FROM nginx:stable-alpine as production-stage COPY --from=build-stage /app/dist /usr/share/nginx/html # 新增这行,复制自定义配置覆盖默认配置 COPY nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
- 修改前端代码中的API请求地址:
把原来的http://server:3000改成相对路径/api,示例:
// 原写法 this.http.get('http://server:3000/users').subscribe(...); // 修改后 this.http.get('/api/users').subscribe(...);
三、验证配置是否生效
- 启动容器:在项目根目录执行
docker-compose up --build - 测试外部访问后端:用Postman或浏览器访问
localhost:3000,应显示无法连接 - 测试前端访问后端:打开
localhost:8080,操作前端触发API请求,能正常获取数据即为配置成功
额外提醒
- Docker内部网络本身是隔离的,只要后端不配置
ports映射到主机,外部就无法直接访问 - Nginx反向代理不仅解决了跨域问题,还隐藏了后端真实地址,进一步提升安全性
depends_on仅保证前端容器在后端之后启动,若后端启动较慢,可自行添加等待脚本,简单场景下可暂时忽略
内容的提问来源于stack exchange,提问作者Nii
相关产品推荐
相关产品推荐

