Mercurial > hg > nginx
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 |