使用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,如需转载请自行联系原作者

相关文章
|
6月前
|
开发框架 应用服务中间件 API
扩展Nginx的无限可能:掌握常见扩展模块和第三方插件的使用方法
扩展Nginx的无限可能:掌握常见扩展模块和第三方插件的使用方法
318 0
|
7月前
|
网络协议 应用服务中间件 Linux
Go 语言 Web 应用怎么使用 Nginx 部署?
Go 语言 Web 应用怎么使用 Nginx 部署?
88 0
|
9月前
|
JavaScript 前端开发 应用服务中间件
nginx部署vue前端项目时,配置文件
nginx部署vue前端项目时,配置文件
110 0
|
9月前
|
负载均衡 JavaScript Unix
部署Vue项目到Nginx:简明教程
部署Vue项目到Nginx:简明教程
815 0
|
9月前
|
JavaScript Java 应用服务中间件
Nginx(三)vue和springboot项目分开部署实战
Nginx(三)vue和springboot项目分开部署实战
254 0
|
负载均衡 前端开发 JavaScript
Nginx部署前端vue后端express项目步骤细节
Nginx部署前端vue后端express项目步骤细节
338 0
|
负载均衡 前端开发 JavaScript
在centos7.6上部署前后端分离项目Nginx反向代理vue.js2.6+Tornado5.1.1,使用supervisor统一管理服务
这一次使用vue.js+tornado的组合来部署前后端分离的web项目,vue.js不用说了,前端当红炸子鸡,泛用性非常广,无论是单页应用,还是混合式开发app,亦或是微信小程序开发,样样得心应手,tornado最近的风头有点被新锐框架sanic抢走了,但是作为老牌的异步非阻塞框架,其内置了支持epoll/kqueue 等高效网络库,而具备了处理高并发的能力并且开发效率也不低,这一次tornado作为承载后端压力的角色。
在centos7.6上部署前后端分离项目Nginx反向代理vue.js2.6+Tornado5.1.1,使用supervisor统一管理服务