# HG changeset patch # User Igor Sysoev # Date 1309257644 0 # Node ID 3cbbe86a7a954ae5b858dd156d44d7ecd9436dc1 # Parent 1e90599af73b3ca38474869e657431943e44d1b3 referer_hash_max_size and referer_hash_bucket_size directives patch by Witold Filipczyk diff --git a/src/http/modules/ngx_http_referer_module.c b/src/http/modules/ngx_http_referer_module.c --- a/src/http/modules/ngx_http_referer_module.c +++ b/src/http/modules/ngx_http_referer_module.c @@ -29,6 +29,9 @@ typedef struct { ngx_flag_t blocked_referer; ngx_hash_keys_arrays_t *keys; + + ngx_uint_t referer_hash_max_size; + ngx_uint_t referer_hash_bucket_size; } ngx_http_referer_conf_t; @@ -54,6 +57,20 @@ static ngx_command_t ngx_http_referer_c 0, NULL }, + { ngx_string("referer_hash_max_size"), + NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1, + ngx_conf_set_num_slot, + NGX_HTTP_LOC_CONF_OFFSET, + offsetof(ngx_http_referer_conf_t, referer_hash_max_size), + NULL }, + + { ngx_string("referer_hash_bucket_size"), + NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1, + ngx_conf_set_num_slot, + NGX_HTTP_LOC_CONF_OFFSET, + offsetof(ngx_http_referer_conf_t, referer_hash_bucket_size), + NULL }, + ngx_null_command }; @@ -239,6 +256,8 @@ ngx_http_referer_create_conf(ngx_conf_t conf->no_referer = NGX_CONF_UNSET; conf->blocked_referer = NGX_CONF_UNSET; + conf->referer_hash_max_size = NGX_CONF_UNSET_UINT; + conf->referer_hash_bucket_size = NGX_CONF_UNSET_UINT; return conf; } @@ -260,6 +279,10 @@ ngx_http_referer_merge_conf(ngx_conf_t * #endif ngx_conf_merge_value(conf->no_referer, prev->no_referer, 0); ngx_conf_merge_value(conf->blocked_referer, prev->blocked_referer, 0); + ngx_conf_merge_uint_value(conf->referer_hash_max_size, + prev->referer_hash_max_size, 2048); + ngx_conf_merge_uint_value(conf->referer_hash_bucket_size, + prev->referer_hash_bucket_size, 64); return NGX_CONF_OK; } @@ -276,9 +299,16 @@ ngx_http_referer_merge_conf(ngx_conf_t * return NGX_CONF_ERROR; } + ngx_conf_merge_uint_value(conf->referer_hash_max_size, + prev->referer_hash_max_size, 2048); + ngx_conf_merge_uint_value(conf->referer_hash_bucket_size, + prev->referer_hash_bucket_size, 64); + conf->referer_hash_bucket_size = ngx_align(conf->referer_hash_bucket_size, + ngx_cacheline_size); + hash.key = ngx_hash_key_lc; - hash.max_size = 2048; /* TODO: referer_hash_max_size; */ - hash.bucket_size = 64; /* TODO: referer_hash_bucket_size; */ + hash.max_size = conf->referer_hash_max_size; + hash.bucket_size = conf->referer_hash_bucket_size; hash.name = "referers_hash"; hash.pool = cf->pool;