blog-frontend
blog-frontend copied to clipboard
nginx+lua记录
推荐使用镜像: https://hub.docker.com/r/fabiocicerchia/nginx-lua
lua-nginx-module
文档: https://github.com/openresty/lua-nginx-module#nginx-api-for-lua
就可以直接进入正题了
OpenRestry
OpenResty是一个基于nginx与lua的高性能Web平台
OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。
OpenResty® 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。
“让你的Web服务直接跑在 Nginx 服务内部”
执行阶段概念
测试配置
location /mixed {
set_by_lua_block $a {
ngx.log(ngx.ERR, "set_by_lua*")
}
rewrite_by_lua_block {
ngx.log(ngx.ERR, "rewrite_by_lua*")
}
access_by_lua_block {
ngx.log(ngx.ERR, "access_by_lua*")
}
content_by_lua_block {
ngx.log(ngx.ERR, "content_by_lua*")
}
header_filter_by_lua_block {
ngx.log(ngx.ERR, "header_filter_by_lua*")
}
body_filter_by_lua_block {
ngx.log(ngx.ERR, "body_filter_by_lua*")
}
log_by_lua_block {
ngx.log(ngx.ERR, "log_by_lua*")
}
}
执行日志
set_by_lua*
rewrite_by_lua*
access_by_lua*
content_by_lua*
header_filter_by_lua*
body_filter_by_lua*
log_by_lua*
nginx把一个请求分成了很多阶段, 这样第三方模块就可以根据自己的行为, 挂载到不同阶段进行处理达到目的
-
set_by_lua*
: 流程分支处理判断变量初始化 -
rewrite_by_lua*
: 转发、重定向、缓存等功能(例如特定请求代理到外网) -
access_by_lua*
: IP 准入、接口权限等情况集中处理(例如配合 iptable 完成简单防火墙) -
content_by_lua*
: 内容生成 -
header_filter_by_lua*
: 响应头部过滤处理(例如添加头部信息) -
body_filter_by_lua*
: 响应体过滤处理(例如完成应答内容统一成大写) -
log_by_lua*
: 会话完成后本地异步完成日志记录(日志可以记录在本地,还可以同步到其他机器)