SpringBoot + Spring Cloud Gateway 怎么实现 Nginx 转发的效果呢

2023-07-08 11:36:29 +08:00
 openDatabase

公司的系统都是内网部署,外网访问不了,计划增加一台外网可访问的前置鉴权转发服务器,鉴权通过则转发请求到内网。

目前遇到的问题:Nginx 可以转发,但是没法加入我们自定义的逻辑和鉴权。想用 Spring Cloud Gateway 来实现鉴权和转发比较合适,Spring Cloud Gateway 的转发不知道哪里没弄好,没实现效果。

什么用 Spring Cloud Gateway 实现,比如请求本机 10.100.2.14:80 的请求都转发到另一台内网的机器 http://10.100.2.221:9000

2452 次点击
所在节点    Java
14 条回复
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
wangjiaolian1126
2023-07-08 11:46:06 +08:00
springcloud gateway 部署监听端口 80
openDatabase
2023-07-08 12:44:36 +08:00
@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).
wellerman
2023-07-08 13:32:11 +08:00
nacos 里服务注册没成功,重新配置一下。
openDatabase
2023-07-08 15:05:20 +08:00
@wellerman 没有用 springcloud 那一套,如标题只用了 SpringBoot + Spring Cloud Gateway
cedoo22
2023-07-08 15:07:53 +08:00
lua 写个脚本
flyqie
2023-07-08 15:31:02 +08:00
@cedoo22 #6

nginx + lua 是个好办法,而且还灵活。
zu1y
2023-07-08 15:35:03 +08:00
试试 traefik 或 apisix ,比 Spring Cloud Gateway 性能和配置方式都简单很多。
nekomiao
2023-07-08 16:11:12 +08:00
一楼的我试了下是可以的,检查下缩进和请求头里有没有 Host: 10.100.2.14 这一项。
或者可以在 Spring Cloud Gateway 里 HostRoutePredicateFactory 这个类打个断点,看下里面的 GatewayPredicate 为什么没返回 true
winglight2016
2023-07-08 17:43:00 +08:00
@zu1y 没错,基于 openrestry 方案的网关方案是正解,速度又快,插件够多
xuanbg
2023-07-08 18:20:32 +08:00
服务要注册到注册中心。docker 直接运行一个 consul 就行了,简单得很。consul 还可以作为配置中心使用。
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 转发。
Heroininu
2023-07-08 20:33:30 +08:00
我觉得你没必要这么折腾得拉,外网服务器上装 nginx+frp ,内网有一台通外网的机器负责连接到外网的机子,并且把请求抓发到内网即可,至于鉴权,原有的健全就可以用,如果是想再加一套授权,那就 basic auth 就好了,这个是改动最小,成本最低,速度最快的方案
kerb15
2023-07-09 00:49:08 +08:00
这是非常基础的问题,网上搜一下就有答案了,同样的需求,完完全全复制粘贴实现的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/955063

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX