Hello!
On Sat, Nov 9, 2013 at 11:44 PM, heap li wrote:
> http://www.xxx.com/ss/ss.php?id=9090
> 本身就是一个302的跳转,它会跳转到http://news.xxx.com/123/1231/1.html上面。;
>
你并没有交待这个默认的 302 跳转究竟是谁发起的,所以我先前都假设是你的 proxy_pass
指向的后端服务器发起的。在这种情况下,rewrite_by_lua 总是先于 ngx_proxy 模块执行,并不会有问题。
如果你是通过 nginx 的 rewrite 配置指令发起的这个默认的 302 跳转,则 rewrite 指令默认运行于
rewrite_by_lua 指令之前,所以你的 Lua 代码还没执行时,rewrite 指令就已经进行跳转了。此种情况下有两种选择:
1. 在 rewrite_by_lua 里执行原先由 rewrite 指令执行的所有 URI 改写和跳转操作。由于所有逻辑都在 Lua
中,所以执行顺序很容易控制。这是推荐的做法。
2. 配置 rewrite_by_lua_no_postpone on; 这一行,让 rewrite_by_lua 运行在
ngx_rewrite 模块的配置执令之前。更多细节请见
https://github.com/chaoslawful/lua-nginx-module#rewrite_by_lua_no_postpone
建议下一次提问时主动提供所有的细节,并使用尽可能准确和清晰的语言,以减少我们无谓的猜测和降低不必要的沟通成本。
Regards,
-agentzh