openresty 学习笔记小结:综合应用实例
这个综合实验实现的功能其实很简单,用户访问一个页面,显示一个默认页面。输入参数(post或者get都可以),如果参数在数据库查询得到并满足一定条件,根据数据库记录的类型调转到不同页面,并记录下访问者的IP并记录到数据库,参数不符合要求返回默认页面。
其实也就用到之前记录下的那些功能点,这个实验也就被用在本网的www入口
用图说话,具体流程:
简单的说,其实就是先看session有无记录,没有看传入参数后先查redis有无记录,没有则查mysql,查完mysql数据处理后都缓存回redis,那么下次再查该数据就可以在redis查到了。至于获取数据后处理完毕都是经过rabbitMQ发送消息再由python写入mysql。
lua程序只有第一次读取该数据的时候需要操作mysql,其他情况都是只操作redis和rabbitMQ。确保lua的高性能得以发挥。
程序目录是如下:
/home/lua/ └── homePage ├── access.lua ├── assets │ ├── css │ │ ├── error-style.css │ │ ├── index-style.css │ │ └── style.css │ └── favicon.ico ├── channelOne.lua ├── channelTwo.lua ├── common │ ├── getArgs.lua │ ├── getIp.lua │ ├── myRabbitmq.lua │ ├── myRedis.lua │ └── mysqlPool.lua ├── config │ └── config.lua ├── error.lua ├── index.lua ├── router.lua └── view ├── channelOne.html ├── channelTwo.html ├── error.html ├── footer.html ├── header.html └── index.html
assets
文件夹下放置静态资源文件view
是页面的视图,使用了template这个库common
是一些封装好的方法access.lua
是入口鉴权router
只是简单的根据鉴权结果分配到不同的页面index.lua
,error.lua
,channelOne.lua
和channelTwo.lua
都是些简单的页面
用到的lua库有
/usr/local/openresty/lualib/resty/
├── template.lua
├── upload.lua
├── mysql.lua
├── rabbitmqstomp.lua
├── redis.lua
├── session
主要的 nginx 配置
http { lua_package_path "/usr/local/openresty/lualib/?.lua;/home/lua/?.lua;"; lua_package_cpath "/usr/local/openresty/lualib/?.so;"; lua_shared_dict limit 10m; lua_shared_dict jsjump 10m; server { listen 80 default_server; server_name localhost; set $SERVER_DIR homePage; set $BASE_PATH /home/lua/$SERVER_DIR; set $template_root $BASE_PATH/view; location / { default_type text/html; lua_code_cache on; access_by_lua_file $BASE_PATH/access.lua; content_by_lua_file $BASE_PATH/router.lua; } location @error { default_type text/html; lua_code_cache on; content_by_lua_file $BASE_PATH/error.lua; } location ~ .*.(js|css|woff|ttf|svg|ico)$ { root $BASE_PATH/assets; } }
另外还有python程序
/home/python/
├── IPGetPlaceDaemon
│ ├── config.cfg
│ ├── daemon.py
│ └── ipGetPlace.py
└── RedisSyncMysqlDaemon
├── config.cfg
├── daemon.py
└── redisSyncMysql.py