V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
openDatabase
V2EX  ›  Java

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

  •  
  •   openDatabase · 2023-07-08 11:36:29 +08:00 · 2410 次点击
    这是一个创建于 504 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    nginx + lua 是个好办法,而且还灵活。
    zu1y
        8
    zu1y  
       2023-07-08 15:35:03 +08:00
    试试 traefik 或 apisix ,比 Spring Cloud Gateway 性能和配置方式都简单很多。
    nekomiao
        9
    nekomiao  
       2023-07-08 16:11:12 +08:00
    一楼的我试了下是可以的,检查下缩进和请求头里有没有 Host: 10.100.2.14 这一项。
    或者可以在 Spring Cloud Gateway 里 HostRoutePredicateFactory 这个类打个断点,看下里面的 GatewayPredicate 为什么没返回 true
    winglight2016
        10
    winglight2016  
       2023-07-08 17:43:00 +08:00
    @zu1y 没错,基于 openrestry 方案的网关方案是正解,速度又快,插件够多
    xuanbg
        11
    xuanbg  
       2023-07-08 18:20:32 +08:00
    服务要注册到注册中心。docker 直接运行一个 consul 就行了,简单得很。consul 还可以作为配置中心使用。
    wellerman
        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 转发。
    Heroininu
        13
    Heroininu  
       2023-07-08 20:33:30 +08:00
    我觉得你没必要这么折腾得拉,外网服务器上装 nginx+frp ,内网有一台通外网的机器负责连接到外网的机子,并且把请求抓发到内网即可,至于鉴权,原有的健全就可以用,如果是想再加一套授权,那就 basic auth 就好了,这个是改动最小,成本最低,速度最快的方案
    kerb15
        14
    kerb15  
       2023-07-09 00:49:08 +08:00
    这是非常基础的问题,网上搜一下就有答案了,同样的需求,完完全全复制粘贴实现的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2425 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 02:05 · PVG 10:05 · LAX 18:05 · JFK 21:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.