]> git.kaiwu.me - nginx.git/commitdiff
Geo: the "volatile" parameter.
authorDmitry Plotnikov <d.plotnikov@f5.com>
Tue, 21 Oct 2025 19:48:36 +0000 (19:48 +0000)
committerdplotnikov-f5 <67346902+dplotnikov-f5@users.noreply.github.com>
Fri, 24 Oct 2025 22:06:54 +0000 (15:06 -0700)
Similar to map's volatile parameter, creates a non-cacheable geo variable.

src/http/modules/ngx_http_geo_module.c
src/stream/ngx_stream_geo_module.c

index 75c03978a4ceb40af54ea904b2a9f1798564a26a..619a5fde81064c91ead487727ee8c1f3600f924f 100644 (file)
@@ -63,6 +63,7 @@ typedef struct {
     unsigned                         allow_binary_include:1;
     unsigned                         binary_include:1;
     unsigned                         proxy_recursive:1;
+    unsigned                         no_cacheable:1;
 } ngx_http_geo_conf_ctx_t;
 
 
@@ -463,6 +464,7 @@ ngx_http_geo_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
                   + sizeof(ngx_http_variable_value_t)
                   + 0x10000 * sizeof(ngx_http_geo_range_t *);
     ctx.allow_binary_include = 1;
+    ctx.no_cacheable = 0;
 
     save = *cf;
     cf->pool = pool;
@@ -478,6 +480,10 @@ ngx_http_geo_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
         goto failed;
     }
 
+    if (ctx.no_cacheable) {
+        var->flags |= NGX_HTTP_VAR_NOCACHEABLE;
+    }
+
     geo->proxies = ctx.proxies;
     geo->proxy_recursive = ctx.proxy_recursive;
 
@@ -623,6 +629,12 @@ ngx_http_geo(ngx_conf_t *cf, ngx_command_t *dummy, void *conf)
             rv = NGX_CONF_OK;
             goto done;
         }
+
+        else if (ngx_strcmp(value[0].data, "volatile") == 0) {
+            ctx->no_cacheable = 1;
+            rv = NGX_CONF_OK;
+            goto done;
+        }
     }
 
     if (cf->args->nelts != 2) {
index 2324bef0df666a4a2c7e52609ac13f85b754d3fa..c109dc72ed8737a65247e518bfda4eb8d057c445 100644 (file)
@@ -61,6 +61,7 @@ typedef struct {
     unsigned                           outside_entries:1;
     unsigned                           allow_binary_include:1;
     unsigned                           binary_include:1;
+    unsigned                           no_cacheable:1;
 } ngx_stream_geo_conf_ctx_t;
 
 
@@ -433,6 +434,7 @@ ngx_stream_geo_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
                   + sizeof(ngx_stream_variable_value_t)
                   + 0x10000 * sizeof(ngx_stream_geo_range_t *);
     ctx.allow_binary_include = 1;
+    ctx.no_cacheable = 0;
 
     save = *cf;
     cf->pool = pool;
@@ -448,6 +450,10 @@ ngx_stream_geo_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
         goto failed;
     }
 
+    if (ctx.no_cacheable) {
+        var->flags |= NGX_STREAM_VAR_NOCACHEABLE;
+    }
+
     if (ctx.ranges) {
 
         if (ctx.high.low && !ctx.binary_include) {
@@ -583,6 +589,12 @@ ngx_stream_geo(ngx_conf_t *cf, ngx_command_t *dummy, void *conf)
 
             goto done;
         }
+
+        else if (ngx_strcmp(value[0].data, "volatile") == 0) {
+            ctx->no_cacheable = 1;
+            rv = NGX_CONF_OK;
+            goto done;
+        }
     }
 
     if (cf->args->nelts != 2) {