一般的Nginx的location配置里经过流程 acsess, content, log就足够了。我有个这样的需求,就是匹配到location后,先对url里带的请求参数进行处理和记录,然后在进行一个302跳转到新的url。代码如下:
location = /land {
content_by_lua_file content.lua;
log_by_lua_file log.lua;
rewrite ^ http://www.baidu.com;
}
我原本以为他们会按顺序执行,先处理老的url里的信息,再跳转到新url,但是实践证明它只会执行rewrite语句,最重要的content部分不执行,log部分能执行,但是content不执行,log就没啥用了,因为这里log的作用是把content里记录的信息发送到redis数据库里。
我的疑问是这种需求302跳转是不是根本不可能实现。如果能实现,大概要怎么改写结构呢?
我目前有个想法,如下:
location = /land {
rewrite_by_lua_file rewrite.lua;
log_by_lua_file log.lua;
}
将content.lua中的内容放到rewrite.lua里去,并且用类似seturi()函数跳转到新地址,也就是不在location里配置rewrite语句了,就是可能跳转到新地址后,log部分又不会执行了。这个不确定。
大概怎么改写思路呢,反正代码内容没问题,就是结构部分不知道怎么调整能实现我的需求。