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:
两种做法:
- 避免使用标准的 access log 模块,而使用 lua-resty-logger-socket 这样的库。
- 使用标准的 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 隔离。