有时候我们想要把部分系统api接口暴露给外部服务使用,部分内部使用
可以用nginx+内部/外部双网关实现该配置(以某一个服务为例)
文章目录
nginx和zuul配置
(1) nginx.config 中配置
server
{
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
listen 80; #监听端口
listen 443;
server_name localhost;
underscores_in_headers on;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Content-Security-Policy "script-src * 'unsafe-inline' 'unsafe-eval'";
add_header X-Frame-Options SAMEORIGIN;
#这个是给外部系统调用开放api的 网关代理
upstream openapi-gateway {
server openapi-gw:9900;
}
#这个是自己系统内部的 网关代理
upstream personal-gateway {
server personal-gw:9910;
}
#如某个服务配置 location如下
# 发送 127.0.0.1:80/piaoeda-web/api/**
#代理到 http://openapi-gateway/piaoeda-web/api/***
# -> 也就是 http://openapi-gw:9900/piaoeda-web/api/***
#这个请求会被spring配置的网关拦截 找到对应匹配规则的服务
location ^~ /piaoeda-web/api/ {
proxy_set_header Host $host; # #后台可以获取到完整的ip+端口号
proxy_set_header X-Forwarded-For $http_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr; #后台可以获取到用户访问的真实ip地址
proxy_pass http://openapi-gateway;
access_log /var/log/nginx/openapi-gateway.log main;
}
}
(2) 在openapi-gateway的服务中配置 yml
server:
port: 9900
spring:
application:
name: openapi-gateway
#zuul网关配置
zuul:
host:
socket-timeout-millis: 60000
set-content-length: true
semaphore:
max-semaphores: 2000
routes: #zuul网关路由配置
piaoeda-web:
#这里可以代理到具体的某一个请求,controller,或者整个服务
path: /piaoeda-web/api/bill/
serviceId: piaoeda-web
stripPrefix: false
(2) 在piaoda-web的服务中配置 yml
server:
port: 9900
servlet:
context-path: /piaoeda-web
spring:
application:
name: piaoeda-web
(3) 在要开放的controller上写上对应zuul配置的匹配规则
@RestController
@RequestMapping({"/api/bill"})
public class BillApiController {
@Autowired
private IBillApiService billApiService;
@PostMapping({"/rqrecognise"})
public ICommonResponse ocr(@Valid @RequestBody BillOcrReqDto param) {
CommonResponse2 commonResponse = (CommonResponse2)this.billApiService.ocr(param);
return (ICommonResponse)commonResponse;
}
}
personal-gateway 的 spring配置和openapi-gateway 基本一致,只是服务端口和代理的服务不同,但是记得personal-gateway的网关服务千万不要加上对openapi服务的代理。同理,openapi-gateway 也不可以代理personal-gateway
总结
以上配置就可完成 nginx+ 双微服务网关 对内外部系统开放不同接口配置
如果有问题可以通过私信或者留言的方式,看到了会回复。