nginx中rewrite uri和set variable语句的关系
relation between rewrite uri and set variable statements in nginx
我试图找出 nginx 位置块中的重写语句与位置块中的设置变量语句之间的关系。为什么我问是因为以下 2 种情况下的不同行为
什么不起作用-获取 http 500,因为 url 未设置-设置是在重写语句之后*
location ~ ^/offer/ {
log_by_lua_file lua/datadog/api_latency.lua;
proxy_pass $url;
proxy_read_timeout 60;
rewrite ^((?U).*)(/?)$ break;
set $location_name offer;
set $url https://example.com;
}
有效方法 - 当设置在重写语句之前时
location ~ ^/offer/ {
log_by_lua_file lua/datadog/api_latency.lua;
proxy_pass $url;
proxy_read_timeout 60;
set $url https://example.com;
rewrite ^((?U).*)(/?)$ break;
set $location_name offer;
}
在 nginx 调试日志中,我可以看到 set 变量在工作情况下被执行,但在非工作情况下没有。我在 nginx 文档中搜索了是否存在任何关系 - 我能得到的最好的是这两个都是在重写阶段执行的,但没有关于此行为原因的其他信息。
知道为什么会这样吗?
break
stops processing the current set of ngx_http_rewrite_module directives as with the break directive;
rewrite
和 set
指令均由 ngx_http_rewrite_module
实现。
语句在 location
块中按顺序求值。 break
(单独或 rewrite...break
的一部分)将在当前上下文中停止处理。所以它后面的任何 set
指令都将被忽略。
我试图找出 nginx 位置块中的重写语句与位置块中的设置变量语句之间的关系。为什么我问是因为以下 2 种情况下的不同行为
什么不起作用-获取 http 500,因为 url 未设置-设置是在重写语句之后*
location ~ ^/offer/ {
log_by_lua_file lua/datadog/api_latency.lua;
proxy_pass $url;
proxy_read_timeout 60;
rewrite ^((?U).*)(/?)$ break;
set $location_name offer;
set $url https://example.com;
}
有效方法 - 当设置在重写语句之前时
location ~ ^/offer/ {
log_by_lua_file lua/datadog/api_latency.lua;
proxy_pass $url;
proxy_read_timeout 60;
set $url https://example.com;
rewrite ^((?U).*)(/?)$ break;
set $location_name offer;
}
在 nginx 调试日志中,我可以看到 set 变量在工作情况下被执行,但在非工作情况下没有。我在 nginx 文档中搜索了是否存在任何关系 - 我能得到的最好的是这两个都是在重写阶段执行的,但没有关于此行为原因的其他信息。
知道为什么会这样吗?
break
stops processing the current set of ngx_http_rewrite_module directives as with the break directive;
rewrite
和 set
指令均由 ngx_http_rewrite_module
实现。
语句在 location
块中按顺序求值。 break
(单独或 rewrite...break
的一部分)将在当前上下文中停止处理。所以它后面的任何 set
指令都将被忽略。