Hello!
On Wed, Apr 24, 2013 at 9:55 PM, Blueant Liu wrote:
> 感谢详尽的说明。
> 如下程序修改headers_in就会崩溃,修改headers_out就没问题。
忍不住我再唠叨一遍:如果我是你,我会使用 valgrind memcheck 来运行 nginx
从而得到内存问题的第一现场。这样可以避免很多不必要的麻烦,节约不断试错的时间。
至少对我来说,C 编程没有这样的工具在手边,无异于自虐 ;)
>
> tag_elt->hash = 1;
如果是 r->headers_in 的话,hash 值须通过 ngx_hash_key_lc 函数从 key 计算出来。例如:
hv->hash = ngx_hash_key_lc(key.data, key.len);
像 ngx_proxy 这样的模块会拿这个 hash 值去查找哈希表。
> ngx_str_set(&tag_elt->key, "Lead-Range");
> ngx_str_set(&tag_elt->value, conf->lead_domain.data);
>
这里第二个 ngx_str_set 宏的用法是错误的。你只能用字符串常量来作为这个宏的第二个参数。你看一下 ngx_str_set
宏的定义就会知道为什么了 :)
#define ngx_str_set(str, text) \
(str)->len = sizeof(text) - 1; (str)->data = (u_char *) text
最后我再一次唠叨一遍(貌似你并没有看全我的上一封邮件):“对于增加、删除、更新现有请求头的功能,你可以参考 ngx_headers_more 模块中的做法:
https://github.com/agentzh/headers-more-nginx-module
类似地,ngx_lua 模块中提供的 ngx.req.set_header 和 ngx.req.clear_header 这两个 Lua
函数也使用的是类似的实现。”
希望我们之间的沟通能更加高效一些,毕竟时间宝贵啊。
Best regards,
-agentzh