[PATCH] Allow 1xx 2xx 3xx 4xx 5xx codes in xxxxx_cache_valid directives.

Gena Makhomed gmm at csdoc.com
Fri Sep 21 11:24:49 UTC 2018


# HG changeset patch
# User Gena Makhomed <gmm at csdoc.com>
# Date 1537528104 -10800
#      Fri Sep 21 14:08:24 2018 +0300
# Node ID a7533f3f3138fe5524a0f14293da4149e65b1402
# Parent  87d2ea860f380dc8418c97c0163412f53c2d008e
Allow 1xx 2xx 3xx 4xx 5xx codes in xxxxx_cache_valid directives.

For example, config fragment

     fastcgi_cache_valid 200 201 202 203 204 205 206 207 208 226 5m;
     fastcgi_cache_valid 300 301 302 303 304 305 306 307 308 10m;

now can be rewritten as

     fastcgi_cache_valid 2xx 5m;
     fastcgi_cache_valid 3xx 10m;

diff -r 87d2ea860f38 -r a7533f3f3138 src/http/ngx_http_file_cache.c
--- a/src/http/ngx_http_file_cache.c	Mon Sep 10 18:57:39 2018 +0300
+++ b/src/http/ngx_http_file_cache.c	Fri Sep 21 14:08:24 2018 +0300
@@ -2290,6 +2290,26 @@
              return valid[i].valid;
          }

+        if (valid[i].status == 1 && status >= 100 && status <= 199) {
+            return valid[i].valid;
+        }
+
+        if (valid[i].status == 2 && status >= 200 && status <= 299) {
+            return valid[i].valid;
+        }
+
+        if (valid[i].status == 3 && status >= 300 && status <= 399) {
+            return valid[i].valid;
+        }
+
+        if (valid[i].status == 4 && status >= 400 && status <= 499) {
+            return valid[i].valid;
+        }
+
+        if (valid[i].status == 5 && status >= 500 && status <= 599) {
+            return valid[i].valid;
+        }
+
          if (valid[i].status == status) {
              return valid[i].valid;
          }
@@ -2666,10 +2686,30 @@

              status = 0;

+        } else if(ngx_strcmp(value[i].data, "1xx") == 0) {
+
+            status = 1;
+
+        } else if(ngx_strcmp(value[i].data, "2xx") == 0) {
+
+            status = 2;
+
+        } else if(ngx_strcmp(value[i].data, "3xx") == 0) {
+
+            status = 3;
+
+        } else if(ngx_strcmp(value[i].data, "4xx") == 0) {
+
+            status = 4;
+
+        } else if(ngx_strcmp(value[i].data, "5xx") == 0) {
+
+            status = 5;
+
          } else {

              status = ngx_atoi(value[i].data, value[i].len);
-            if (status < 100) {
+            if (status < 100 || status > 599) {
                  ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
                                     "invalid status \"%V\"", &value[i]);
                  return NGX_CONF_ERROR;



More information about the nginx-devel mailing list