这里的路由指的是在web开发中,访问路径以及具体实现内容的映射。比如,/a映射到某个具体的页面,这个就称之为一个路由。而动态路由,顾名思义就是动态添加这种路由映射关系。
在nginx中,通过rewrite和proxy_pass来实现路由映射或者说反向代理,但是这种关系按照传统的配置必须写死在配置文件中,然后通过快速"无缝"重启nginx。虽说是无缝,但是其繁琐的配置和枯燥的重启操作还是无法避免。
最近,在github上看到个项目ceryx,是nginx结合lua进行动态路由的映射的,也就是上面所说的映射关系,用lua来管理,虽然是比较简单的实现,但是可以分析学习下。该项目通过用redis的<source,target>结构来保存这种映射关系,这样在nginx中可以快速获得这种关系,以便做出处理,同时,采用HTTP的形式暴露对redis这种路由关系进行管理的接口。
from ceryx.db import RedisRouter
resource_fields = {
'source': fields.String,
'target': fields.String,
}
parser = reqparse.RequestParser()
parser.add_argument(
'source', type=str, required=True, help='Source is required'
)
parser.add_argument(
'target', type=str, required=True, help='Target is required'
)
router = RedisRouter.from_config()
def lookup_or_abort(source):
"""

本文探讨了如何利用nginx的lua模块和redis来实现动态路由。传统方式中,路由配置需要写入静态文件并重启nginx,但ceryx项目提供了一种新的解决方案,通过lua动态管理路由映射,利用redis存储关系,并通过HTTP接口进行接口管理,简化了配置流程。
最低0.47元/天 解锁文章
553

被折叠的 条评论
为什么被折叠?



