公司的系统都是内网部署,外网访问不了,计划增加一台外网可访问的前置鉴权转发服务器,鉴权通过则转发请求到内网。
目前遇到的问题:Nginx 可以转发,但是没法加入我们自定义的逻辑和鉴权。想用 Spring Cloud Gateway 来实现鉴权和转发比较合适,Spring Cloud Gateway 的转发不知道哪里没弄好,没实现效果。
什么用 Spring Cloud Gateway 实现,比如请求本机 10.100.2.14:80 的请求都转发到另一台内网的机器 http://10.100.2.221:9000
1
wangjiaolian1126 2023-07-08 11:45:22 +08:00
spring:
cloud: gateway: routes: - id: blog uri: http://10.100.2.221:9000 predicates: - Host=10.100.2.14 |
2
wangjiaolian1126 2023-07-08 11:46:06 +08:00
springcloud gateway 部署监听端口 80
|
3
openDatabase OP @wangjiaolian1126 没有实现跳转,Whitelabel Error Page
This application has no configured error view, so you are seeing this as a fallback. Sat Jul 08 12:43:49 CST 2023 [50348cef] There was an unexpected error (type=Not Found, status=404). |
4
wellerman 2023-07-08 13:32:11 +08:00
nacos 里服务注册没成功,重新配置一下。
|
5
openDatabase OP @wellerman 没有用 springcloud 那一套,如标题只用了 SpringBoot + Spring Cloud Gateway
|
6
cedoo22 2023-07-08 15:07:53 +08:00
lua 写个脚本
|
8
zu1y 2023-07-08 15:35:03 +08:00
试试 traefik 或 apisix ,比 Spring Cloud Gateway 性能和配置方式都简单很多。
|
9
nekomiao 2023-07-08 16:11:12 +08:00
一楼的我试了下是可以的,检查下缩进和请求头里有没有 Host: 10.100.2.14 这一项。
或者可以在 Spring Cloud Gateway 里 HostRoutePredicateFactory 这个类打个断点,看下里面的 GatewayPredicate 为什么没返回 true |
10
winglight2016 2023-07-08 17:43:00 +08:00
@zu1y 没错,基于 openrestry 方案的网关方案是正解,速度又快,插件够多
|
11
xuanbg 2023-07-08 18:20:32 +08:00
服务要注册到注册中心。docker 直接运行一个 consul 就行了,简单得很。consul 还可以作为配置中心使用。
|
12
wellerman 2023-07-08 18:39:54 +08:00
@openDatabase https://spring.io/blog/2022/08/26/creating-a-custom-spring-cloud-gateway-filter 这个应该可以解决你的需求。我之前研究过,没问题。如果后面只有一两个服务,不如用 nginx 转发。
|
13
Heroininu 2023-07-08 20:33:30 +08:00
我觉得你没必要这么折腾得拉,外网服务器上装 nginx+frp ,内网有一台通外网的机器负责连接到外网的机子,并且把请求抓发到内网即可,至于鉴权,原有的健全就可以用,如果是想再加一套授权,那就 basic auth 就好了,这个是改动最小,成本最低,速度最快的方案
|
14
kerb15 2023-07-09 00:49:08 +08:00
这是非常基础的问题,网上搜一下就有答案了,同样的需求,完完全全复制粘贴实现的
|