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

相关文章
|
11月前
|
编解码 应用服务中间件 Linux
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
758 1
|
10月前
|
网络安全 开发工具 git
在GitLab CI中同步HTTPS仓库地址的yaml配置
最后,提交并推送 `.gitlab-ci.yml`文件到您的GitLab仓库。GitLab CI/CD将自动识别这个文件,并在每次推送到 `master`分支时执行定义的同步任务。
486 16
|
11月前
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
542 18
|
10月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
661 4
|
11月前
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
922 17
|
10月前
|
Kubernetes 安全 网络协议
Kubernetes实用指令:通过dry-run生成部署与服务的YAML配置
总结起来, 使用 ` -- dry—run = client `- o yam l' 参数能够帮助用户预览 Kubernetes 资源定义并且确保它们符合预期效果且没有立即影响现有集群断层结构. 这种做法对于新手学习 K8s 资源规范、测试新策略或者审核现有策略都非常有效率与安全.
763 4
|
11月前
|
Java 测试技术 数据安全/隐私保护
通过yaml文件配置自动化测试程序
通过yaml文件可以将自动化测试环境,测试数据和测试行为分开,请看一下案例
423 4
|
数据建模 应用服务中间件 PHP
配置nginx容器和php容器协同工作成功,使用ip加端口的方式进行通信
本示例演示如何通过Docker挂载同一宿主目录至Nginx与PHP容器,实现PHP项目运行环境配置。需注意PHP容器中监听地址修改为0.0.0.0:9000,并调整Nginx配置中fastcgi_pass指向正确的IP与端口。同时确保Nginx容器中/var/www/html权限正确,以避免访问问题。
配置nginx容器和php容器协同工作成功,使用ip加端口的方式进行通信
|
应用服务中间件 网络安全 nginx
配置Nginx以支持Websocket连接的方法。
通过上述配置,Nginx将能够理解WebSocket协议的特殊要求,代理Websocket流量到合适的后端服务器。注意,Websocket并不是HTTP,尽管它最初是通过HTTP请求启动的连接升级,因此保证Nginx了解并能够妥善处理这种升级流程是关键。
2493 10
|
Ubuntu 应用服务中间件 Linux
在Ubuntu上配置Nginx实现开机自启功能
至此,Nginx应该已经被正确地设置为开机自启。在Ubuntu中利用 `systemd`对服务进行管理是一种高效的方式,为系统管理员提供了强大的服务管理能力,包括但不限于启动、停止、重启服务,以及配置服务的开机自启动。通过这些简洁的命令,即使是对Linux不太熟悉的用户也能轻松地进行配置。
544 0

推荐镜像

更多