orlabs / orange

OpenResty/Nginx Gateway for API Monitoring and Management.
http://orange.sumory.com
MIT License
2.31k stars 573 forks source link

关于rewrite的jump问题 #259

Open delgyd opened 5 years ago

delgyd commented 5 years ago

在看源码发现在rewrite里,只有ngx_set_ui(to_rewrite,true) 按照ngx.req.set_uri的参数,应该有一个false哟 jump为true,等价于rewrite...last jump为false,等价于rewrite...break

但在源码里,将jump参数设成false,请求出来的结果为404.这是什么?

zhangbao0325 commented 5 years ago

在看源码发现在rewrite里,只有ngx_set_ui(to_rewrite,true) 按照ngx.req.set_uri的参数,应该有一个false哟 jump为true,等价于rewrite...last jump为false,等价于rewrite...break

但在源码里,将jump参数设成false,请求出来的结果为404.这是什么?

能看看您的nginx配置,rewrite规则配置吗?

delgyd commented 5 years ago

在看源码发现在rewrite里,只有ngx_set_ui(to_rewrite,true) 按照ngx.req.set_uri的参数,应该有一个false哟 jump为true,等价于rewrite...last jump为false,等价于rewrite...break 但在源码里,将jump参数设成false,请求出来的结果为404.这是什么?

能看看您的nginx配置,rewrite规则配置吗? location /las { default_type text/html; access_log logs/host-last.access.log main; content_by_lua_file /data/webapp/openresty/nginx/conf/lua_conf/las8881.lua; } location /bra { default_type text/html; access_log logs/host-bra.access.log main; content_by_lua_file /data/webapp/openresty/nginx/conf/lua_conf/bra8881.lua; }

zhangbao0325 commented 5 years ago

在看源码发现在rewrite里,只有ngx_set_ui(to_rewrite,true) 按照ngx.req.set_uri的参数,应该有一个false哟 jump为true,等价于rewrite...last jump为false,等价于rewrite...break 但在源码里,将jump参数设成false,请求出来的结果为404.这是什么?

能看看您的nginx配置,rewrite规则配置吗? location /las { default_type text/html; access_log logs/host-last.access.log main; content_by_lua_file /data/webapp/openresty/nginx/conf/lua_conf/las8881.lua; } location /bra { default_type text/html; access_log logs/host-bra.access.log main; content_by_lua_file /data/webapp/openresty/nginx/conf/lua_conf/bra8881.lua; }

如果将jump参数改为true,是正常跳转吗? las8881.lua和bra8881.lua的相关代码能看看不?

delgyd commented 5 years ago

在看源码发现在rewrite里,只有ngx_set_ui(to_rewrite,true) 按照ngx.req.set_uri的参数,应该有一个false哟 jump为true,等价于rewrite...last jump为false,等价于rewrite...break 但在源码里,将jump参数设成false,请求出来的结果为404.这是什么?

能看看您的nginx配置,rewrite规则配置吗? location /las { default_type text/html; access_log logs/host-last.access.log main; content_by_lua_file /data/webapp/openresty/nginx/conf/lua_conf/las8881.lua; } location /bra { default_type text/html; access_log logs/host-bra.access.log main; content_by_lua_file /data/webapp/openresty/nginx/conf/lua_conf/bra8881.lua; }

如果将jump参数改为true,是正常跳转吗? las8881.lua和bra8881.lua的相关代码能看看不?

这两个里面就是一个调试信息 直接ngx.say(xxx) if ngxvaruri == suri then if flag == "last" then ngx.req.set_uri("/las/bbb.html",true) return true elseif flag == "break" then ngx.req.set_uri("/bra/bbb.html",false) return true end end 这是我参考源码仿写的。ngxvaruri=="/xxx/xxx.html"

zhangbao0325 commented 5 years ago

在看源码发现在rewrite里,只有ngx_set_ui(to_rewrite,true) 按照ngx.req.set_uri的参数,应该有一个false哟 jump为true,等价于rewrite...last jump为false,等价于rewrite...break 但在源码里,将jump参数设成false,请求出来的结果为404.这是什么?

能看看您的nginx配置,rewrite规则配置吗? location /las { default_type text/html; access_log logs/host-last.access.log main; content_by_lua_file /data/webapp/openresty/nginx/conf/lua_conf/las8881.lua; } location /bra { default_type text/html; access_log logs/host-bra.access.log main; content_by_lua_file /data/webapp/openresty/nginx/conf/lua_conf/bra8881.lua; }

如果将jump参数改为true,是正常跳转吗? las8881.lua和bra8881.lua的相关代码能看看不?

这两个里面就是一个调试信息 直接ngx.say(xxx) if ngxvaruri == suri then if flag == "last" then ngx.req.set_uri("/las/bbb.html",true) return true elseif flag == "break" then ngx.req.set_uri("/bra/bbb.html",false) return true end end 这是我参考源码仿写的。ngxvaruri=="/xxx/xxx.html"

rewrite的操作是在rewrite_by_lua阶段生效的,不是在content_by_lua阶段,你可以阅读一下ngx.req.set_uri的官方文档解释:https://github.com/openresty/lua-nginx-module#ngxreqset_uri。 The jump argument can only be set to true in rewrite_by_lua*. Use of jump in other contexts is prohibited and will throw out a Lua exception.