nginx有路由API吗?

nginx有路由API吗?,nginx,routing,Nginx,Routing,我想看看nginx(OSS,非商用)是否不仅可以用作负载均衡器,还可以用作网络路由器/交换机,以防我需要关闭应用程序并将流量重定向到CDN/静态页面等 我希望找到一个restapi,它可以让我动态地配置路由规则,但遗憾的是,我什么也看不到 nginx是否提供了这种开箱即用的功能?或者我能把它和能做的东西配对吗?这将是一个Java应用程序,它正在平衡,我看到有一个模块。因此,也许我可以通过Java(在nginx服务器上运行)以某种方式公开REST端点……想法?没有现成的API。您必须编写一些端点代

我想看看nginx(OSS,非商用)是否不仅可以用作负载均衡器,还可以用作网络路由器/交换机,以防我需要关闭应用程序并将流量重定向到CDN/静态页面等

我希望找到一个restapi,它可以让我动态地配置路由规则,但遗憾的是,我什么也看不到


nginx是否提供了这种开箱即用的功能?或者我能把它和能做的东西配对吗?这将是一个Java应用程序,它正在平衡,我看到有一个模块。因此,也许我可以通过Java(在nginx服务器上运行)以某种方式公开REST端点……想法?

没有现成的API。您必须编写一些端点代码段,并在上游配置中使用变量

看看:


这相当简单。

如果您使用nginx clojure来完成您需要的工作

  • 用作路由器的java/clojure重写处理程序
  • 充当路由器API端点的java/clojure内容处理程序
  • 用于在nginx工作进程之间共享状态/规则的共享映射(如果nginx工作进程的数量>1,则需要此映射)
e、 g

在nginx.conf中
##InitHandler用于初始化共享映射
jvm_init_handler_name my.InitHandler;
上游myApp{
.....
}
##当我的应用程序关闭时,请求将被重定向到后端
上游静态后端{
....
}
服务器{
....
##在nginx工作进程之间共享状态/规则
共享映射路由规则tinymap?空间=32k,条目=256;
##$mybackend将由重写处理程序MyRouter更改
设置$mybackend“”;
地点/{
重写\u处理程序\u类型java;
重写\u handler\u name my.MyRouter;
代理传递http://$mybackend;
}
地点/地点{
内容处理程序类型java;
内容处理程序名称my.MyRouterApi;
}
}
在InitHandler.java中
public类InitHandler实现NginxJavaRingHandler{
公共静态NginxSharedHashMap规则;
公共对象[]调用(映射fakeRequest){
rules=NginxSharedHashMap.build(“routerRules”);
}
}
在MyRouter.java中
公共类MyRouter实现NginxJavaRingHandler{
公共对象[]调用(映射请求){
String backend=InitHandler.rules.get(“mybackend”);
如果(后端==null){
backend=“myApp”;
}
((NginxJavaRequest)req).setVariable(“mybackend”,backend);
返回nginx.clojure.java.Constants.PHASE\u DONE;
}
}
在MyRouterApi.java中
公共类MyRouterApi实现NginxJavaRingHandler{
公共对象[]调用(映射请求){
字符串后端=req.get(minicants.QUERY\u字符串);
/*赤尾*/
//更新共享映射中键为“mybackend”的条目
InitHandler.rules.put(“mybackend”,backend);
返回新对象[]{200,null,“OK”};
}
}
可以从中找到更多文档


顺便说一句,这将使使用nginx clojure进行开发/测试变得非常简单。

非常感谢您在@xfeep(+1)上给出了这么好的答案-如果您不介意的话,请回答两个快速的后续问题!(1) 假设通常,
myApp
应该在
myapp01.example.org
myapp02.example.org
之间实现负载平衡。假设我决定将流量重新路由到我的静态CDN,那么应该提供的URL是
mycdn.example.org
上游myApp
上游staticBackend
MyRouterApi#invoke
现在看起来是什么样子?以及(2)如果映射大小为32k,允许256个条目,我假设每个条目剩下128字节,是吗?每个条目代表什么(HTTP请求?),128字节的存储空间足够吗?啊,对不起,我撒谎了!我还有最后一个问题(对不起!):(3)这个解决方案是否可以使用HTTPS和身份验证(BasicAuth、JWT等)?理想情况下,
/restapi
“端点”(内容处理程序)将受到外部世界的保护…想法?回答问题(3):是的。将内容处理程序移动到HTTPS服务器块,可以从中找到更多详细信息。对于身份验证,您可以尝试、或