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 日志为:
    {\x22b\x22:\x22aaa\x22}

配置文件

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 隔离。

results matching ""

    No results matching ""