[英]Does nginx have a Routing API?
我試圖看看nginx(OSS,不是商業)不僅可以用作負載均衡器,還可以用作網絡路由器/交換機,如果我需要關閉我的應用並將流量重定向到CDN /靜態頁面等
我希望找到一個可以允許我動態配置路由規則的REST API,但是,我什么都沒看到。
nginx是否提供開箱即用的功能? 或者我可以將它配對嗎? 這將是一個平衡的Java應用程序,我看到有一個nginx-clojure模塊。 所以也許我可以通過Java(在nginx服務器上運行)以某種方式暴露一個REST端點......想法?
如果你使用nginx-clojure來完成你需要的工作
例如
## InitHandler is used to initialize shared map
jvm_init_handler_name my.InitHandler;
upstream myApp {
.....
}
## requests will be redirected to upstream staticBackend when my app is down
upstream staticBackend {
....
}
server {
....
## share state/rules among nginx worker processes
shared_map routerRules tinymap?space=32k&entries=256;
## $mybackend will be changed by rewrite handler MyRouter
set $mybackend "";
location / {
rewrite_handler_type java;
rewrite_handler_name my.MyRouter;
proxy_pass http://$mybackend;
}
location /restapi {
content_handler_type java;
content_handler_name my.MyRouterApi;
}
}
public class InitHandler implements NginxJavaRingHandler {
public static NginxSharedHashMap<String, String> rules;
public Object[] invoke(Map<String, String> fakeRequest) {
rules = NginxSharedHashMap.build("routerRules");
}
}
public class MyRouter implements NginxJavaRingHandler {
public Object[] invoke(Map<String, String> req) {
String backend = InitHandler.rules.get("mybackend");
if (backend == null) {
backend = "myApp";
}
((NginxJavaRequest)req).setVariable("mybackend", backend);
return nginx.clojure.java.Constants.PHASE_DONE;
}
}
public class MyRouterApi implements NginxJavaRingHandler {
public Object[] invoke(Map<String, String> req) {
String backend = req.get(MiniConstants.QUERY_STRING);
/*chek backend ...... */
//update the entry whose key is "mybackend" in the shared map
InitHandler.rules.put("mybackend", backend);
return new Object[] {200, null, "OK"};
}
}
可以從https://nginx-clojure.github.io/找到更多文檔。
BTW 嵌入API將使用nginx-clojure進行開發/測試非常容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.