下面分轻量组件、完整网关框架、嵌入式服务三类,全部开源,原生支持路径重写、端口转发、负载均衡、请求转发,对标 Nginx rewrite、proxy_pass、location 能力。
一、完整 API 网关(生产首选,功能对标 Nginx)
1. Spring Cloud Gateway(Spring 官方,Java/SpringBoot)
最主流、零额外中间件,纯 Java 实现
核心能力完全覆盖 Nginx:
proxy_pass:转发到后端 IP / 端口、服务名(注册中心)rewrite路径重写:正则替换路径、截取前缀、重定向匹配规则:Path、Header、Query、Cookie 对应 Nginx location
负载均衡、熔断、限流、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-proxy、netty-reverse-proxy自定义
ChannelDuplexHandler实现:
URI 正则替换(rewrite)
请求转发到指定端口(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 核心需求)
六、典型场景选型建议
SpringBoot 微服务,需要动态路由、rewrite 转发 → Spring Cloud Gateway(最优)
不想引入 Spring,独立轻量 Java 代理程序 → Undertow
简单 HTTP 代理、本地端口中转工具 → LittleProxy
传统容器、配置文件驱动替代 Nginx → Jetty Proxy
补充:关键能力对应 Nginx 语法对照
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 路径匹配