nginx 中 rewrite uri 和 set variable 语句之间的关系

我正在尝试找出 nginx 位置块中 rewrite 语句和位置块内部 set variable 语句之间的关系。我提出这个问题是因为下面两种情况有不同的行为

不工作的内容- 因为 url 没有设置而得到 http 500 - 当 set 在 rewrite 语句之后时*

location ~ ^/offer/ {
      log_by_lua_file lua/datadog/api_latency.lua;
      proxy_pass $url;
      proxy_read_timeout 60;
      rewrite ^((?U).*)(/?)$ $1  break;
      set $location_name offer;
      set $url https://example.com;
}

工作的内容 - 当 set 在 rewrite 语句之前时

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).*)(/?)$ $1  break;
      set $location_name offer;
}

在 nginx 调试日志中,我可以看到 set variable 在运行的情况下被执行,但不会在不工作的情况下被执行。我已经在 nginx 文档中搜索了是否有任何关系- 最好的结果是这两者都在 rewrite 阶段执行,但没有关于此行为原因的其他信息。

任何想法为什么会发生这种情况?

点赞
用户4862445
用户4862445

文档中得知:

break

与 break 指令类似,它停止处理当前的 ngx_http_rewrite_module 指令集;

rewriteset 指令都是由 ngx_http_rewrite_module 实现。

这些语句在location块中按顺序逐个评估。 使用 break (无论是独立的还是作为 rewrite...break 的一部分) 将停止在当前上下文中进行处理。之后的任何 set 指令都将被忽略。

2020-10-29 08:32:44