×
关于Socket 编程发展OpenResty 简介Lua 入门Lua 简介Lua 环境搭建基础数据类型表达式控制结构if/elsewhilerepeatforbreak,returnLua函数函数的定义函数的参数函数返回值全动态函数调用模块String 库Table 库日期时间函数数学库函数文件操作

Lua 高阶

元表面向对象编程局部变量判断数组大小非空判断正则表达式不用标准库虚变量抵制使用 module() 定义模块调用代码前先定义函数点号与冒号操作符的区别module 是邪恶的FFI什么是 JITNginxNginx 新手起步location 匹配规则if 是邪恶的静态文件服务日志反向代理负载均衡陷阱和常见错误

OpenResty

环境搭建Windows 平台CentOS 平台Ubuntu 平台Mac OS X 平台Hello World与其他 location 配合获取 uri 参数获取请求 body输出响应体日志输出简单API Server框架使用 Nginx 内置绑定变量子查询不同阶段共享变量防止 SQL 注入如何发起新 HTTP 请求

LuaRestyRedisLibrary

访问有授权验证的 Redisselect+set_keepalive 组合操作引起的数据读写错误redis 接口的二次封装(简化建连、拆连等细节)redis 接口的二次封装(发布订阅)pipeline 压缩请求数量script 压缩复杂请求动态生成的 lua-resty-redis 模块方法LuaCjsonLibraryjson解析的异常捕获稀疏数组空table编码为array还是objectPostgresNginxModule调用方式简介不支持事务超时健康监测SQL注入LuaNginxModule执行阶段概念正确的记录日志热装载代码阻塞操作缓存sleep定时任务禁止某些终端访问请求返回后继续执行调试请求中断后的处理我的 lua 代码需要调优么变量的共享范围动态限速shared.dict 非队列性质正确使用长链接如何引用第三方 resty 库body 在 location 中的传递典型应用场景怎样理解 cosocket如何安全启动唯一实例的 timer如何正确的解析域名使用动态 DNS 来完成 HTTP 请求LuaRestyLock缓存失效风暴

stream_lua_module

balancer_by_lua

OpenResty 与 SSL

HTTPS 时代动态加载证书和 OCSP staplingTLS session resumption测试代码静态分析单元测试代码覆盖率API 测试性能测试持续集成灰度发布Web 服务API的设计数据合法性检测协议无痛升级代码规范连接池C10K 编程TIME_WAIT 问题与 Docker 使用的网络瓶颈火焰图什么时候使用如何定位问题

OpenResty 周边

如何添加自己的lua api

零碎知识点记录

2016-7 月汇总如何在后台开启轻量级线程来定时更新共享内存一个 openresty 内存“泄漏”问题用 do-end 整理你的代码lua 中如何 continue调用 FFI 出现 "table overflow"如何定位 openresty 崩溃 bug

TBD


Test::Nginx 能指定现成的 nginx.conf,而不是自动生成一个吗

Question:

如题

Answer:

或许你可以用 nginx 的 include 指令来加载核心的 nginx 配置,比如

=== TEST 1: App
--- config
 include ../../../conf/app-core.conf;
--- request
GET /t
--- response_body
hello world
--- no_error_log
[error]

假设你的项目目录结构是这样的:

t/
└── a.t
conf/
└── app-core.conf

nginx.conf 的 boiler-plate 由 Test::Nginx 来自动生成是必要的,否则我们无法实现这里列举的 Test::Nginx 的各种高级测试模式,具体可以看这里

access 日志字符编码问题

Question:

    浏览器请求 json 数据格式
    http://127.0.0.1:8866/?a={%22b%22:%22%E4%B8%AD%22,%22a%22:%22zh_cn%22}
openresty access 日志为:
    {x22bx22:x22aaax22}

配置文件

location /a.gif {
       internal;
       log_escape_non_ascii off;
       set_unescape_uri $u_jsona $arg_a;
       log_subrequest on;

       access_log /source/428/web/access.log accessjson;
}

自动转换的为 json中的 "" 请问有解决方法吗?

Answer:

两种做法:

  1. 避免使用标准的 access log 模块,而使用 lua-resty-logger-socket 这样的库。
  2. 使用标准的 access log 模块,但在日志接收端对 xx 进行转码。

share_dict 中的过期时间有时候过期有时候不过期?

Question:

如题

Answer:

是的,nginx 核心里的 timer 过期时间使用的是绝对时间戳。建议在改系统时间时使用 ntp 这样可以逐步校正时间的工具,以避免系统时钟直接往后跳或者太快向前蹦。

Lua 变量的传递和内存的使用

Question:

Lua 初学者有一个关于内存使用的问题, 有的 language 在传递变量到 function 的时候是传递这块 memory 的 reference,有 的 language 是 copy 一份 memory 的 reference,有的 language 是 copy 了一份 memory,我想知道 lua 在传递变量的时候是如何实现的

Answer:

Lua 里面的变量都是值的引用(或者说是值的别名),而并不是值的容器。所以 Lua 里的赋值和参数传递全部都是引用传递。

ngx.log 可不可以选择几个不同的 log path

Question:

如题

Answer:

你需要使用不同的 location {} 或者 server {} 进行隔离。如果不能这么做的话,你只能自己用 Lua 实现一个错误日志模块了,这倒也挺简单,只是需要注意复用文件名柄并及时刷缓冲(最好不要带缓冲)就好。

http://nginx.org/en/docs/ngx_core_module.html#error_log

不同的 location 使用不同的 error log path 即可。也就是上面说的 locatin 和server 隔离。


分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)