mirror of
https://github.com/nginx/nginx.git
synced 2024-11-27 23:49:00 +08:00
proxy_cache_key
This commit is contained in:
parent
43f3f4a73d
commit
44a69c83a4
@ -64,6 +64,10 @@ typedef struct {
|
||||
ngx_str_t location;
|
||||
ngx_str_t url;
|
||||
|
||||
#if (NGX_HTTP_CACHE)
|
||||
ngx_http_complex_value_t cache_key;
|
||||
#endif
|
||||
|
||||
ngx_http_proxy_vars_t vars;
|
||||
|
||||
ngx_flag_t redirect;
|
||||
@ -132,6 +136,8 @@ static char *ngx_http_proxy_store(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
#if (NGX_HTTP_CACHE)
|
||||
static char *ngx_http_proxy_cache(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
void *conf);
|
||||
static char *ngx_http_proxy_cache_key(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
void *conf);
|
||||
#endif
|
||||
|
||||
static char *ngx_http_proxy_lowat_check(ngx_conf_t *cf, void *post, void *data);
|
||||
@ -327,6 +333,13 @@ static ngx_command_t ngx_http_proxy_commands[] = {
|
||||
0,
|
||||
NULL },
|
||||
|
||||
{ ngx_string("proxy_cache_key"),
|
||||
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
|
||||
ngx_http_proxy_cache_key,
|
||||
NGX_HTTP_LOC_CONF_OFFSET,
|
||||
0,
|
||||
NULL },
|
||||
|
||||
{ ngx_string("proxy_cache_path"),
|
||||
NGX_HTTP_MAIN_CONF|NGX_CONF_2MORE,
|
||||
ngx_http_file_cache_set_slot,
|
||||
@ -715,6 +728,15 @@ ngx_http_proxy_create_key(ngx_http_request_t *r)
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
if (plcf->cache_key.value.len) {
|
||||
|
||||
if (ngx_http_complex_value(r, &plcf->cache_key, key) != NGX_OK) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
*key = ctx->vars.key_start;
|
||||
|
||||
key = ngx_array_push(&r->cache->keys);
|
||||
@ -2068,6 +2090,10 @@ ngx_http_proxy_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
|
||||
ngx_conf_merge_ptr_value(conf->upstream.cache_valid,
|
||||
prev->upstream.cache_valid, NULL);
|
||||
|
||||
if (conf->cache_key.value.data == NULL) {
|
||||
conf->cache_key = prev->cache_key;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
if (conf->method.len == 0) {
|
||||
@ -2738,6 +2764,34 @@ ngx_http_proxy_cache(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||
return NGX_CONF_OK;
|
||||
}
|
||||
|
||||
|
||||
static char *
|
||||
ngx_http_proxy_cache_key(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||
{
|
||||
ngx_http_proxy_loc_conf_t *plcf = conf;
|
||||
|
||||
ngx_str_t *value;
|
||||
ngx_http_compile_complex_value_t ccv;
|
||||
|
||||
value = cf->args->elts;
|
||||
|
||||
if (plcf->cache_key.value.len) {
|
||||
return "is duplicate";
|
||||
}
|
||||
|
||||
ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
|
||||
|
||||
ccv.cf = cf;
|
||||
ccv.value = &value[1];
|
||||
ccv.complex_value = &plcf->cache_key;
|
||||
|
||||
if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
|
||||
return NGX_CONF_OK;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user