易君召
易君召
发布于 2026-07-21 / 2 阅读
0
0

Java 开源组件 / 框架实现 Nginx rewrite + proxy_pass 反向代理能力技术选型

下面分轻量组件完整网关框架嵌入式服务三类,全部开源,原生支持路径重写、端口转发、负载均衡、请求转发,对标 Nginx rewriteproxy_passlocation 能力。

一、完整 API 网关(生产首选,功能对标 Nginx)

1. Spring Cloud Gateway(Spring 官方,Java/SpringBoot)

最主流、零额外中间件,纯 Java 实现

  • 核心能力完全覆盖 Nginx:

    1. proxy_pass:转发到后端 IP / 端口、服务名(注册中心)

    2. rewrite 路径重写:正则替换路径、截取前缀、重定向

    3. 匹配规则:Path、Header、Query、Cookie 对应 Nginx location

    4. 负载均衡、熔断、限流、SSL、重试、Header 改写

  • rewrite 示例(application.yml)

spring:
  cloud:
    gateway:
      routes:
        - id: demo
          uri: http://127.0.0.1:8081 # proxy_pass 目标端口
          predicates:
            - Path=/api/**
          filters:
            # rewrite /api/xxx → /xxx 等价 nginx rewrite ^/api/(.*)$ /$1 break;
            - RewritePath=/api/(?<path>.*), /$\{path\}
  • 优势:Spring 生态无缝集成,异步非阻塞(Reactor Netty),性能接近 Nginx;纯 Java,可内嵌业务代码。

  • 开源地址:Spring Cloud Gateway 官方开源

2. Apache ServiceComb Gateway

华为开源云原生网关,Java 实现,支持正则 rewrite、静态转发、灰度路由。

3. JBoss Undertow Gateway / Wildfly Gateway

Undertow 内置反向代理处理器,可独立启动做代理,支持路径重写、端口转发。

二、轻量级嵌入式反向代理组件(独立 Jar / 内嵌应用)

1. Undertow(JBoss 开源高性能 Web 服务器)

底层基于 NIO,自带 ProxyHandler + RewriteHandler纯 Java 无依赖,可单独起代理服务,不用 Spring。

  • 核心 API:

    • ProxyHandler = proxy_pass 端口转发

    • RewriteHandler = nginx rewrite 正则路径重写

      极简示例代码:

java运行

Undertow.builder()
    .addHttpListener(80, "0.0.0.0")
    .setHandler(path -> {
        // 路径重写 rewrite ^/api/(.*) /$1
        RewriteHandler rewrite = new RewriteHandler(Handlers.proxyHandler(URI.create("http://127.0.0.1:8081")));
        rewrite.addRewriteRule("^/api/(.*)", "/$1");
        return rewrite;
    })
    .build().start();

适合:小型代理、内嵌到 Java 程序、轻量化中转。

2. Netty + netty-reverse-proxy(开源封装)

Netty 本身无内置 rewrite,但社区封装组件:

  • netty-proxynetty-reverse-proxy

    自定义 ChannelDuplexHandler 实现:

  1. URI 正则替换(rewrite)

  2. 请求转发到指定端口(proxy_pass)

    适合自研网关、高性能私有中转服务。

3. LittleProxy(成熟开源 Java 代理库)

专门的 HTTP/HTTPS 代理组件,支持:

  • 请求路径正则修改(rewrite)

  • 转发到任意后端端口

  • 拦截、修改请求 / 响应 Header

    Maven 直接引入,可独立启动代理服务,代码量极少。

三、通用微服务网关(独立进程部署,替代 Nginx)

1. Apache APISIX(底层 Rust,但提供 Java SDK/Java 插件)

主体高性能,Java 插件可自定义 rewrite 转发逻辑;适合大规模集群。

2. Spring Cloud Zuul 1(同步阻塞,不推荐新项目)

老一代网关,支持路径重写与转发,性能弱于 Gateway,新项目放弃。

四、独立 Java 代理服务(可直接部署,无需开发)

Jetty Proxy

Jetty WebServer 自带反向代理模块,配置文件即可配置 rewrite 规则 + 后端端口,类似 Nginx 配置文件,不用写代码。

五、各方案对比(对标 Nginx 核心需求)

框架 / 组件

rewrite 正则

proxy_pass 端口转发

部署方式

性能

适用场景

Spring Cloud Gateway

✅ 完整正则

✅ IP / 端口 / 服务名

SpringBoot 内嵌 / 独立

高(Reactor Netty)

Spring 微服务首选

Undertow 原生

纯 Java 内嵌

极高

轻量化独立代理

LittleProxy

Jar 内嵌

中高

自研小型代理

Jetty Proxy

✅ 配置文件

独立服务

配置化代理

Netty 原生封装

需要自行实现

自研

极高

深度定制网关

六、典型场景选型建议

  1. SpringBoot 微服务,需要动态路由、rewrite 转发 → Spring Cloud Gateway(最优)

  2. 不想引入 Spring,独立轻量 Java 代理程序 → Undertow

  3. 简单 HTTP 代理、本地端口中转工具 → LittleProxy

  4. 传统容器、配置文件驱动替代 Nginx → Jetty Proxy

补充:关键能力对应 Nginx 语法对照

  1. Nginx rewrite

rewrite ^/api/(.*)$ /$1 break;

Java 侧:RewritePath过滤器(Gateway)/ RewriteHandler(Undertow)正则捕获替换

2. Nginx proxy_pass

location /api/ {
    proxy_pass http://127.0.0.1:8081;
}

Java 侧:ProxyHandler / Gateway uri 配置目标后端地址端口

3. Nginx location 匹配

Java 侧:Gateway Predicate / Undertow PathHandler 路径匹配


评论