目前有这样的需求:
比如有很多server块,每个server块下面也有很多locatin接口,例如下面:
server {
server_name server1;
rewrite_by_lua_file rewrite.lua;
location /a {
rewite_by_lua_file rewrite.lua;
}
location /b {
rewrite_by_lua_file rewrite.lua;
}
location ....
}
server {
server_name server2;
rewrite_by_lua_file rewrite.lua;
location /a {
rewite_by_lua_file rewrite.lua;
}
location /b {
rewrite_by_lua_file rewrite.lua;
}
location ....
}
有可能每个server块的server层的rewite_by_lua阶段需要的逻辑不通(不同的业务),且同一个server下面的location接口需要的rewrite_by_lua阶段的逻辑也不同。
目前为了满足要求,采用了一种方法,把所有的rewrite_by_lua指令后接上一个统一的主脚本 rewrite.lua. 而所有其它的逻辑,都用lua脚本封装为模块,在主脚本里面通过require的方式来调用。
每个地方的rewrite_by_lua阶段需要执行的不同逻辑,通过配置变量的方式来开启或者关闭。
例如在server1的server层,打开某些逻辑的开关(配置一些set变量为"on"),在location层,打开另外逻辑的开关。
这种方式来达到目的的,而且目前来看,也确实是可行的。
但对于这种做法,感觉不是很优雅,目前有两个疑问点:
1 如果后面的逻辑多了起来,那么把所有的逻辑都放在主脚本里面会不会有些累赘?
2 逻辑一多,势必很有很多的set变量,这样配置在conf文件中,是否有些多余?
(之前考虑过把这些开关放入到专门的开关配置lua脚本中,但不能满足上面的要求)
3 这样的做法,是否以后会遇到执行顺序上的困扰?
目前来看,逻辑大约三两个,set变量开关也不多,而且主脚本只有一个,很好管理。
请问下:有没有更加优雅的做法,能够达到这些目的?还是说我们的这种同一个阶段有不同的执行逻辑的做法本来就是不符合ngx_lua的设计初衷的?