openresty 学习笔记小结:综合应用实例
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
openresty 学习笔记小结:综合应用实例的更多相关文章
- python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息,抓取政府网新闻内容
python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI,采用Python语言编写 ...
- input子系统学习笔记六 按键驱动实例分析下【转】
转自:http://blog.chinaunix.net/uid-20776117-id-3212095.html 本文接着input子系统学习笔记五 按键驱动实例分析上接续分析这个按键驱动实例! i ...
- ArcGIS案例学习笔记-中国2000坐标转换实例
ArcGIS案例学习笔记-中国2000坐标转换实例 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 目的:西安1980.中国2000.WGS84(GPS)等任意坐标系 ...
- ensorflow学习笔记四:mnist实例--用简单的神经网络来训练和测试
http://www.cnblogs.com/denny402/p/5852983.html ensorflow学习笔记四:mnist实例--用简单的神经网络来训练和测试 刚开始学习tf时,我们从 ...
- openresty 学习笔记六:使用session库
openresty 学习笔记六:使用session库 lua-resty-session 是一个面向 OpenResty 的安全和灵活的 session 库,它实现了 Secure Cookie Pr ...
- openresty 学习笔记番外篇:python的一些扩展库
openresty 学习笔记番外篇:python的一些扩展库 要写一个可以使用的python程序还需要比如日志输出,读取配置文件,作为守护进程运行等 读取配置文件 使用自带的ConfigParser模 ...
- openresty 学习笔记番外篇:python访问RabbitMQ消息队列
openresty 学习笔记番外篇:python访问RabbitMQ消息队列 python使用pika扩展库操作RabbitMQ的流程梳理. 客户端连接到消息队列服务器,打开一个channel. 客户 ...
- openresty 学习笔记五:访问RabbitMQ消息队列
openresty 学习笔记五:访问RabbitMQ消息队列 之前通过比较选择,决定采用RabbitMQ这种消息队列来做中间件,目的舒缓是为了让整个架构的瓶颈环节.这里是做具体实施,用lua访问Rab ...
- openresty 学习笔记四:连接mysql和进行相关操作
openresty 学习笔记四:连接mysql和进行相关操作 毕竟redis是作为缓存,供程序的快速读写,虽然reidis也可以做持久化保存,但还是需要一个做数据存储的数据库.比如首次查询数据在red ...
随机推荐
- Workerman:PHP的socket框架
hi,我们今天来讲讲Workerman,什么是Workerman呢? 看看官网上的介绍 Workerman是一款开源高性能异步PHP socket框架.支持高并发,超高稳定性,被广泛的用于手机app. ...
- 基于MATLAB的手写公式识别(转折)
2021-03-29 21:11:00 很难说自己是不是上当受骗了,老师明明说利用MATLAB进行手写体(记得是手写体,再不济印刷体)的识别是轻而易举的. 平时我也十分喜欢MATLAB这一操作系统,认 ...
- ASP调用SDK微信分享好友、朋友圈
ASP调用SDK微信分享好友.朋友圈需要用到sha1.asp,我先来上主代码,然后再附加sha1.asp,方便大家直接复制过去即可使用. 页面:shara.asp 1 <%@LANGUAGE=& ...
- Ubuntu20.04安装MongoDB
本教程描述了如何在Ubuntu20.04上安装MongoDB4.4 安装MongoDB Ubuntu 20.04默认存储库中不提供最新版本的MongoDB,因此需要在系统中添加官方的MongoDB存储 ...
- 软件篇-02-基于ZED 2和ORB_SLAM2的SLAM实践
时隔两周,我又回来了. 本期内容如题,ZED 2的SDK功能还是挺多的,包括轨迹跟踪,实时建图等等.虽然由于是商业产品,我看不到他们的源代码,但是根据使用情况来看,ZED 2内部是采用了IMU和光 ...
- php中怎么使用call_user_func动态调用方法
php中可使用call_user_func进行方法的动态调用,可以动态调用普通函数.类方法以及带参数的类方法1.定义一个普通函数getCurrentDate,用于获取今天日期.call_user_fu ...
- Average Score39届亚洲赛牡丹江站A题
题意: A班有n个人,B班有m个人,然后现在给你n-1个A班人的成绩,和m个B班人的成绩,然后题目要求求出A班剩下的没给成绩那个人的成绩范围,要求是这个人从A班转到B班后能使A,B的平均分 ...
- Linux中Nginx服务器的部署和配置
目录 Nginx安装方式: yum源安装 目录结构: 源码包安装 目录结构: Nginx中支持PHP Nginx中配置php对mysql数据库的支持 Nginx配置反向代理服务器 正常代理 根据不同端 ...
- JAVA WEB应用目录
目录 Tomcat目录 MyEclipse目录 部署启动应用 Tomcat目录 首先,官方下载 tomcat 安装包,解压.得到下面的目录 bin 目录是tomcat启动和关闭目录.startup.b ...
- Portswigger web security academy:DOM-based vulnerabilities
DOM-based vulnerabilities 目录 DOM-based vulnerabilities 1 - DOM XSS using web messages 2 - DOM XSS us ...