微服务设计中,前端请求通过nginx->gateway_service->微服务的链路访问后端服务,并通过在网关过滤请求进行统一鉴权。为避免用户绕过网关直接访问微服务,可以采用以下措施:
一:核心目标
确保所有请求都必须经过网关服务,并在网关进行统一鉴权和路由控制,可以通过以下方式实现:
1.关闭微服务的外网访问端口
2.使用内网通信,限制网络访问
3.在网关层做统一鉴权与路由发现
4.微服务之间使用服务发现(如nacos)进行通信
二:具体实现方案
1.禁止微服务直接暴露给公网
docker compose中限制端口映射
yml
services:
user-service:
ports:
-"8080:8080"
改为:
-"8080" #只在容器内部使用,不对外暴露
docker默认只将端口暴露给容器网络中的其他服务,不会暴露到宿主机。
2.使用docker网络隔离
在docker-compose.yml中定义一个私有网络,确保只用gateway能访问服务
yml
networks:
mircoservice-network:
driver:bridge
services:
gateway_service:
networks;
- mircoservice-network
user_service:
networks;
- mircoservice-network
不同网络的服务无法直接通信,只能通过网关或者nginx访问。
其他略过。
三:附加安全建议:
https 在nginx层启用https,防止token被窃听
跨域控制 在gateway层添加cors配置,防止恶意网站访问
日志控制 记录所有请求日志,监控异常行为
防火墙规则 在服务器上配置防火墙,只允许特定IP或网段访问微服务端口
jwt白名单 在gateway中维护白名单,仅允许指定域名或路径访问


592

被折叠的 条评论
为什么被折叠?



