一、OpenResty介绍
OpenResty 是一个基于 Nginx与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
OpenResty通过汇聚各种设计精良的 Nginx模块,从而将 Nginx有效地变成一个强大的通用 Web 应用平台。,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。
简单的说:OpenResty = Nginx + Lua,是一个增强的Nginx。
二、OpenResty安装
1.、安装开发库依赖
yum install -y pcre-devel openssl-devel gcc curl
2、配置yum的依赖源
yum install yum-utils
yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
3、.安装OpenResty
yum install openresty
4、openresty的默认安装目录
/usr/local/openresty
5、启动openresty(Nginx)
/usr/local/openresty/nginx/sbin/nginx
或者
service openresty start
6、通过浏览器查看nginx的页面
三、OpenResty配置文件
1、修改openresty下nginx的配置文件
vi /usr/local/openresty/nginx/conf/nginx.conf
在http的配置下添加如下配置
location /lua {
default_type 'text/html';
content_by_lua 'ngx.say("hello 51doit")';
}
2、在浏览器中进行测试
3、配置伪装图片的静态地址
location /log.gif {
#伪装成gif文件
default_type image/gif;
#本身关闭access_log
access_log off;
#返回空图片
empty_gif;
}
4、 使用lua的log_by_lua_file将参数写入到指定的日志文件中
替换上面的log.gif
location /log.gif {
#伪装成gif文件
default_type image/gif;
#本身关闭access_log
access_log off;
#使用lua将nginx的接收的参数写入到日志文件中
log_by_lua_file 'conf/log.lua';
#返回空图片
empty_gif;
}
5、创建一个log.lua文件
vi /usr/local/openresty/nginx/conf/log.lua
编写lua脚本
-- 引入lua所有解析json的库
local cjson = require "cjson"
-- 获取请求参数列表
local request_args_tab = ngx.req.get_uri_args()
-- 使用lua的io打开一个文件,如果文件不存在,就创建,a为append模式
local file = io.open("/logs/access.log", "a")
-- 定义一个json对象
local log_json = {}
-- 将参数的K和V迭代出来,添加到json对象中
for k, v in pairs(request_args_tab) do
log_json[k] = v
end
-- 将json写入到指定的log文件,末尾追加换行
file:write(cjson.encode(log_json), "\n")
-- 将数据写入
file:flush()
创建存放日志的目录并设置写入权限
mkdir /logs
chmod o+w /logs
6、按小时生产文件
如果一直往一个文件中写入数据,这个日志文件会过大,造成读写效率变低,现在按照小时生成文件
-- 引入lua用来解析json的库
local cjson = require "cjson"
-- 获取请求参数列表
local request_args_tab = ngx.req.get_uri_args()
-- 获取当前系统时间
local time = os.date("%Y%m%d%H",unixtime)
-- 使用lua的io打开一个文件,如果文件不存在,就创建,a为append模式
local path = "/mylog/access-" .. time .. ".log"
local file = io.open(path, "a")
-- 定义一个json对象
local log_json = {}
-- 将参数的K和V迭代出来,添加到json对象中
for k, v in pairs(request_args_tab) do
log_json[k] = v
end
-- 将json写入到指定的log文件,末尾追加换行
file:write(cjson.encode(log_json), "\n")
-- 将数据写入
file:flush()