Nginx 日志配置详解
前言Nginx日志对于统计、系统服务排错很有用。Nginx日志主要分为两种:access_log(访问日志)和error_log(错误日志)。通过访问日志我们可以得到用户的IP地址、浏览器的信息,请求的处理时间等信息。错误日志记录了访问出错的信息,可以帮助我们定位错误的原因。本文将详细描述一下如何配置Nginx日志。 设置access_log访问日志主要记录客户端的请求。客户端向Nginx服务器发起的每一次请求都记录在这里。客户端IP,浏览器信息,referer,请求处理时间,请求URL等都可以在访问日志中得到。当然具体要记录哪些信息,你可以通过log_format指令定义。 语法12access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]]; # 设置访问日志access_log off; # 关闭访问日志 path 指定日志的存放位置。 format 指定日志的格式。默认使用预定义的combined。 buffer 用来指定日志写入时的缓存大小。默认是64k。 gzip...
OpenResty Lua API — 共享内存区域
摘自:http://www.daileinote.com/computer/openresty/11 通过 lua_shared_dict 指令可以声明一个共享内存区域,可以在多个 worker 进程间共享,单位支持 k、m,然后配合 ngx.shared.DICT api函数来操作。nginx -s reload 后共享内存的数据还在。 这个共享内存功能非常有用,极大的便利了worker 进程间的通信和协作,而且还提供了类似 redis 的数据结构,可以当做一个简易的数据库,而且没有通信开销。 共享内存在 Openresty 里用途很广,基于它可以实现流量统计、缓存、进程锁等高级功能。 12345678910111213141516171819202122232425http { lua_shared_dict dogs 10m; server { location /set { content_by_lua_block { local dogs = ...
OpenResty Lua API — 常用组件
摘自:http://www.daileinote.com/computer/openresty/09 下面列出 lua-nginx-module 模块内置的一些组件。 ngx.escape_uri1syntax: newstr = ngx.escape_uri(str) 转义uri。 ngx.unescape_uri1syntax: newstr = ngx.unescape_uri(str) 取消转义。 12345678910location = /test { content_by_lua_block { ngx.say(ngx.escape_uri("http://www.freecls.com?name=freecls&age=28")) ngx.say(ngx.unescape_uri("http%3A%2F%2Fwww.freecls.com%3Fname%3Dfreecls%26age%3D28")) } }[...
openresty(lua-API-正则表达式)
摘自:http://www.daileinote.com/computer/openresty/10 ngx_lua 在表 ngx.re 里提供了5个正则表达式相关函数,它们的底层实现为 nginx 的 PCRE 库,并且支持 PCRE-JIT,速度非常快,完全可以代替 Lua 标准库的字符串匹配函数。 ngx.re.match1syntax: captures, err = ngx.re.match(subject, regex, options?, ctx?, res_table?) 返回第一个匹配,没匹配或报错返回 nil。 捕获的结果存在 captures 里,captures[0] 代表全部,captures[1] 代表第一个括号的捕获值,没捕获到的返回 nil。 1234567891011local m, err = ngx.re.match("hello, 1234", "[0-9]+")if m then -- m[0] == "1234"else if err then --出错 ...
OpenResty Lua API — 请求相关
摘自:http://www.daileinote.com/computer/openresty/08 ngx.req.is_internal1syntax: is_internal = ngx.req.is_internal() 判断是否为内部请求。 ngx.get_phase1syntax: str = ngx.get_phase() 获取当前阶段名 1234567891011121314init #init_by_lua*.init_worker #init_worker_by_lua*.ssl_cert #ssl_certificate_by_lua*.ssl_session_fetch #ssl_session_fetch_by_lua*.ssl_session_store #ssl_session_store_by_lua*.set #set_by_lua*.rewrite #rewrite_by_lua*.balancer #balance...
OpenResty 基础及运行机制
摘自:http://www.daileinote.com/computer/openresty/04 局部模块在同一个worker中是共享的在同一个 worker 中,使用 local 修饰的模块代码和数据只会被加载一次,该模块下的数据在同一个 worker 下的所有请求共享,但是全局的却不是(也就是不加 local 修饰),那是由于一个请求一个协程的设计原则。 123456location /lua { content_by_lua_block { local mydata = require "mydata" ngx.say(mydata.get_age("dog")) }} 当第一次请求 /lua 时,当前 worker 会加载缓存该模块,接下来所有到 /lua 的请求都会使用预先加载的数据,这也是 openresty 高性能的原因所在。 一定要注意,数据在同一个 worker 下共享,换句话说,启动 nginx 如果有多个 work...
OpenResty 配置指令
摘自:http://www.daileinote.com/computer/openresty/05 下面是 lua-nginx-module 模块的一些配置指令 lua_package_path123syntax: lua_package_path <lua-style-path-str>default: context: http 设置 lua 模块的搜索路径,可以包含 $prefix 或 ${prefix} 变量,当我们有多个 openresty 程序通过 -p 命令指定工作目录启动时非常有用。 lua_package_cpath123syntax: lua_package_cpath <lua-style-path-str>default: context: http 指定c动态库搜索路径,其他的同上。 12lua_package_cpath '/usr/lib64/lua/5.1/?.so;;/tmp/lua/*.so;;';lua_package_path '$prefix/lib/*.lua;;/tmp/lu...
