使用tornado模板引擎配合yaml构建nginx配置接口 [扩展saltstack]

简介:

最近同事们在搞一个nginx的配置下发接口,项目用tornado redis yaml来实现,我这里就簡單分享下关于nginx配置api实现。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#coding:utf- 8
#xiaorui.cc
import  tornado.httpserver
import  yaml
import  tornado.gredis
import  tornado.ioloop
import  tornado.web
import  redis
import  gevent
from gevent.queue  import  Queue, Empty
from gevent.pool  import  Group
from gevent  import  getcurrent
from gevent.coros  import  BoundedSemaphore
# define one  "add"  在模板传递两个数,他会自己做运算,这个和jinja2的filter很像
def add(x, y):
     return  (x+y)
class  MainHandler(tornado.web.RequestHandler):
     def  get (self):
         print self.get_argument( 'nginxid' )
         f=open( '%s.yaml' %self.get_argument( 'nginxid' ))
         ldata=yaml.load(f)
         f.close()
         print ldata
         items = [ "item1" , "item2" , "item3" ]
         # 可以直接传递list和字典                                              
         self.render( "templates/nginx.upstream" , items=items, add=add,ldata=ldata)
application = tornado.web.Application([
     (r "/nginxupstream" , MainHandler),
])
if  __name__ ==  "__main__" :
      http_server = tornado.httpserver.HTTPServer(application)
      http_server.listen( 8889 )
      tornado.ioloop.IOLoop.instance().start()


后端的模板程序:

1
2
3
4
5
6
7
8
9
upstream {{ ldata[ 'upstream_name' ] }} {                                        
     {{ ldata[ 'upstream_mode' ] }};
     {%  for  in  ldata[ 'upstream_rs' ] %}
     {%  if  i[ 'server_info' ][ 'kp' ] %}keepalive {{ i[ 'server_info' ][ 'kp' ] }};{% end %}
     {%  for  in  i[ 'server_info' ][ 'rs' ] %}
     server {{ a[ 'real_server' ][ 'ip' ] }} {{ a[ 'real_server' ][ 'port' ] }};
     {% end %}
     {% end %}
}



通过tornado的api 去做get请求,返回的不同主机的 nginx upstream的操作块配置。


wKioL1NGCluzKqofAADTHgA0_OI044.jpg



wKiom1NGCq-Rv1X3AAFY2Phmyug187.jpg


这里是服务器端的日志打印情况。可以看到yaml loads之后,他就是一个很大的json串 。


wKiom1NGCsHjAjlXAAdtnBJuOOY594.jpg


已经把很多服务器nginx的upstream集群池配置导入到了yaml配置里面。python提供了好用的模块,可以舒服的针对yaml增删改查。

wKioL1NGCrKhtMq1AASc4RjEbg8031.jpg


咱们来看看nginx的yaml的格式,配置。 你自己可以做更多的扩展,比如在upstream里面的backup,max_fails,fail_timeout等参数。

wKioL1NGC9uCbWqWAANjBswesOc789.jpg

原文:http://rfyiamcool.blog.51cto.com/1030776/1393371


这样的方式下发配置,还是很靠谱的,最少我已经把lvs、nginx的配置应用进去了。

其他的想法,这个方法可以用在saltstack上面的,看到我写的关于salt lvs的文章,大家会有思路的。不想用yaml的话,可以换成mongodb做。对于平台来说,mongodb更方便的。





 本文转自 rfyiamcool 51CTO博客,原文链接:http://blog.51cto.com/rfyiamcool/1393371,如需转载请自行联系原作者

相关文章
|
13天前
|
前端开发 JavaScript 应用服务中间件
Nginx 支持 JavaScript:前所未有的扩展
Nginx 是全球领先的高性能 Web 服务器,以其高效的反向代理和负载均衡功能著称。近期,Nginx 正式支持 JavaScript(通过 NJS 模块),基于 V8 引擎,允许在配置中嵌入 JS 代码,极大提升了灵活性和扩展性。开发者可以使用 JavaScript 实现动态请求处理、自定义认证、复杂响应处理、中间件编写及流量控制等功能,显著降低开发和维护难度,同时保持高性能。NJS 模块的引入为 Nginx 带来了前所未有的扩展能力,适应快速变化的业务需求。
27 0
|
2月前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
39 4
|
7月前
|
缓存 负载均衡 算法
解读 Nginx:构建高效反向代理和负载均衡的秘密
解读 Nginx:构建高效反向代理和负载均衡的秘密
138 2
|
2月前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
61 3
|
3月前
|
Kubernetes 应用服务中间件 nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
|
3月前
|
监控 应用服务中间件 网络安全
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
184 0
|
5月前
|
前端开发 应用服务中间件 nginx
[译] 面向 React 和 Nginx 的 Docker 多阶段构建
[译] 面向 React 和 Nginx 的 Docker 多阶段构建
[译] 面向 React 和 Nginx 的 Docker 多阶段构建
|
5月前
|
NoSQL Java 应用服务中间件
使用Redis和Nginx分别实现限制接口请求频率
这篇文章介绍了如何使用Redis和Nginx分别实现限制接口请求频率的方法,包括具体的命令使用、代码实现和配置步骤。
83 0
|
6月前
|
JavaScript 应用服务中间件 nginx
【项目部署系列教程】5. nginx配置反向代理,解决跨域接口的访问
【项目部署系列教程】5. nginx配置反向代理,解决跨域接口的访问
274 10
|
6月前
|
前端开发 应用服务中间件 nginx
网页设计,若依项目修改(It must be done)01----若依打包位置,nginx代理前端静态资源和后端接口,就是怎样设置转载,访问固定端口,让他访问其他资料的配置文件,访问/,给你那些
网页设计,若依项目修改(It must be done)01----若依打包位置,nginx代理前端静态资源和后端接口,就是怎样设置转载,访问固定端口,让他访问其他资料的配置文件,访问/,给你那些