comparison src/http/ngx_http_upstream.c @ 9276:5e7588d2d9cc

Upstream: $upstream_cache_key variable.
author Kirill A. Korinsky <kirill@korins.ky>
date Thu, 23 May 2024 18:48:32 +0300
parents 208a4adb82ef
children c5623963c29e
comparison
equal deleted inserted replaced
9275:199dc0d6b05b 9276:5e7588d2d9cc
20 static ngx_int_t ngx_http_upstream_cache_background_update( 20 static ngx_int_t ngx_http_upstream_cache_background_update(
21 ngx_http_request_t *r, ngx_http_upstream_t *u); 21 ngx_http_request_t *r, ngx_http_upstream_t *u);
22 static ngx_int_t ngx_http_upstream_cache_check_range(ngx_http_request_t *r, 22 static ngx_int_t ngx_http_upstream_cache_check_range(ngx_http_request_t *r,
23 ngx_http_upstream_t *u); 23 ngx_http_upstream_t *u);
24 static ngx_int_t ngx_http_upstream_cache_status(ngx_http_request_t *r, 24 static ngx_int_t ngx_http_upstream_cache_status(ngx_http_request_t *r,
25 ngx_http_variable_value_t *v, uintptr_t data);
26 static ngx_int_t ngx_http_upstream_cache_key(ngx_http_request_t *r,
25 ngx_http_variable_value_t *v, uintptr_t data); 27 ngx_http_variable_value_t *v, uintptr_t data);
26 static ngx_int_t ngx_http_upstream_cache_last_modified(ngx_http_request_t *r, 28 static ngx_int_t ngx_http_upstream_cache_last_modified(ngx_http_request_t *r,
27 ngx_http_variable_value_t *v, uintptr_t data); 29 ngx_http_variable_value_t *v, uintptr_t data);
28 static ngx_int_t ngx_http_upstream_cache_etag(ngx_http_request_t *r, 30 static ngx_int_t ngx_http_upstream_cache_etag(ngx_http_request_t *r,
29 ngx_http_variable_value_t *v, uintptr_t data); 31 ngx_http_variable_value_t *v, uintptr_t data);
412 414
413 { ngx_string("upstream_cache_status"), NULL, 415 { ngx_string("upstream_cache_status"), NULL,
414 ngx_http_upstream_cache_status, 0, 416 ngx_http_upstream_cache_status, 0,
415 NGX_HTTP_VAR_NOCACHEABLE, 0 }, 417 NGX_HTTP_VAR_NOCACHEABLE, 0 },
416 418
419 { ngx_string("upstream_cache_key"), NULL,
420 ngx_http_upstream_cache_key, 0,
421 NGX_HTTP_VAR_NOCACHEABLE, 0 },
422
417 { ngx_string("upstream_cache_last_modified"), NULL, 423 { ngx_string("upstream_cache_last_modified"), NULL,
418 ngx_http_upstream_cache_last_modified, 0, 424 ngx_http_upstream_cache_last_modified, 0,
419 NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 }, 425 NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
420 426
421 { ngx_string("upstream_cache_etag"), NULL, 427 { ngx_string("upstream_cache_etag"), NULL,
6002 return NGX_OK; 6008 return NGX_OK;
6003 } 6009 }
6004 6010
6005 6011
6006 static ngx_int_t 6012 static ngx_int_t
6013 ngx_http_upstream_cache_key(ngx_http_request_t *r,
6014 ngx_http_variable_value_t *v, uintptr_t data)
6015 {
6016 u_char *p;
6017 size_t len;
6018 ngx_str_t *key;
6019 ngx_uint_t i;
6020 ngx_http_cache_t *c;
6021
6022 if (r->cache == NULL || r->cache->keys.nelts == 0) {
6023 v->not_found = 1;
6024 return NGX_OK;
6025 }
6026
6027 c = r->cache;
6028
6029 len = 0;
6030 key = c->keys.elts;
6031
6032 for (i = 0; i < c->keys.nelts; i++) {
6033 len += key[i].len;
6034 }
6035
6036 p = ngx_pnalloc(r->pool, len);
6037 if (p == NULL) {
6038 return NGX_ERROR;
6039 }
6040
6041 v->len = len;
6042 v->valid = 1;
6043 v->no_cacheable = 0;
6044 v->not_found = 0;
6045 v->data = p;
6046
6047 for (i = 0; i < c->keys.nelts; i++) {
6048 p = ngx_cpymem(p, key[i].data, key[i].len);
6049 }
6050
6051 return NGX_OK;
6052 }
6053
6054
6055 static ngx_int_t
6007 ngx_http_upstream_cache_last_modified(ngx_http_request_t *r, 6056 ngx_http_upstream_cache_last_modified(ngx_http_request_t *r,
6008 ngx_http_variable_value_t *v, uintptr_t data) 6057 ngx_http_variable_value_t *v, uintptr_t data)
6009 { 6058 {
6010 u_char *p; 6059 u_char *p;
6011 6060