Mercurial > hg > nginx
comparison src/http/modules/ngx_http_referer_module.c @ 3939:3cbbe86a7a95
referer_hash_max_size and referer_hash_bucket_size directives
patch by Witold Filipczyk
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 28 Jun 2011 10:40:44 +0000 |
parents | dd1570b6f237 |
children | debb2f235aa3 |
comparison
equal
deleted
inserted
replaced
3938:1e90599af73b | 3939:3cbbe86a7a95 |
---|---|
27 | 27 |
28 ngx_flag_t no_referer; | 28 ngx_flag_t no_referer; |
29 ngx_flag_t blocked_referer; | 29 ngx_flag_t blocked_referer; |
30 | 30 |
31 ngx_hash_keys_arrays_t *keys; | 31 ngx_hash_keys_arrays_t *keys; |
32 | |
33 ngx_uint_t referer_hash_max_size; | |
34 ngx_uint_t referer_hash_bucket_size; | |
32 } ngx_http_referer_conf_t; | 35 } ngx_http_referer_conf_t; |
33 | 36 |
34 | 37 |
35 static void * ngx_http_referer_create_conf(ngx_conf_t *cf); | 38 static void * ngx_http_referer_create_conf(ngx_conf_t *cf); |
36 static char * ngx_http_referer_merge_conf(ngx_conf_t *cf, void *parent, | 39 static char * ngx_http_referer_merge_conf(ngx_conf_t *cf, void *parent, |
50 { ngx_string("valid_referers"), | 53 { ngx_string("valid_referers"), |
51 NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE, | 54 NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE, |
52 ngx_http_valid_referers, | 55 ngx_http_valid_referers, |
53 NGX_HTTP_LOC_CONF_OFFSET, | 56 NGX_HTTP_LOC_CONF_OFFSET, |
54 0, | 57 0, |
58 NULL }, | |
59 | |
60 { ngx_string("referer_hash_max_size"), | |
61 NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1, | |
62 ngx_conf_set_num_slot, | |
63 NGX_HTTP_LOC_CONF_OFFSET, | |
64 offsetof(ngx_http_referer_conf_t, referer_hash_max_size), | |
65 NULL }, | |
66 | |
67 { ngx_string("referer_hash_bucket_size"), | |
68 NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1, | |
69 ngx_conf_set_num_slot, | |
70 NGX_HTTP_LOC_CONF_OFFSET, | |
71 offsetof(ngx_http_referer_conf_t, referer_hash_bucket_size), | |
55 NULL }, | 72 NULL }, |
56 | 73 |
57 ngx_null_command | 74 ngx_null_command |
58 }; | 75 }; |
59 | 76 |
237 conf->regex = NGX_CONF_UNSET_PTR; | 254 conf->regex = NGX_CONF_UNSET_PTR; |
238 #endif | 255 #endif |
239 | 256 |
240 conf->no_referer = NGX_CONF_UNSET; | 257 conf->no_referer = NGX_CONF_UNSET; |
241 conf->blocked_referer = NGX_CONF_UNSET; | 258 conf->blocked_referer = NGX_CONF_UNSET; |
259 conf->referer_hash_max_size = NGX_CONF_UNSET_UINT; | |
260 conf->referer_hash_bucket_size = NGX_CONF_UNSET_UINT; | |
242 | 261 |
243 return conf; | 262 return conf; |
244 } | 263 } |
245 | 264 |
246 | 265 |
258 #if (NGX_PCRE) | 277 #if (NGX_PCRE) |
259 ngx_conf_merge_ptr_value(conf->regex, prev->regex, NULL); | 278 ngx_conf_merge_ptr_value(conf->regex, prev->regex, NULL); |
260 #endif | 279 #endif |
261 ngx_conf_merge_value(conf->no_referer, prev->no_referer, 0); | 280 ngx_conf_merge_value(conf->no_referer, prev->no_referer, 0); |
262 ngx_conf_merge_value(conf->blocked_referer, prev->blocked_referer, 0); | 281 ngx_conf_merge_value(conf->blocked_referer, prev->blocked_referer, 0); |
282 ngx_conf_merge_uint_value(conf->referer_hash_max_size, | |
283 prev->referer_hash_max_size, 2048); | |
284 ngx_conf_merge_uint_value(conf->referer_hash_bucket_size, | |
285 prev->referer_hash_bucket_size, 64); | |
263 | 286 |
264 return NGX_CONF_OK; | 287 return NGX_CONF_OK; |
265 } | 288 } |
266 | 289 |
267 if ((conf->no_referer == 1 || conf->blocked_referer == 1) | 290 if ((conf->no_referer == 1 || conf->blocked_referer == 1) |
274 "in the \"valid_referers\" directive " | 297 "in the \"valid_referers\" directive " |
275 "without any valid referer"); | 298 "without any valid referer"); |
276 return NGX_CONF_ERROR; | 299 return NGX_CONF_ERROR; |
277 } | 300 } |
278 | 301 |
302 ngx_conf_merge_uint_value(conf->referer_hash_max_size, | |
303 prev->referer_hash_max_size, 2048); | |
304 ngx_conf_merge_uint_value(conf->referer_hash_bucket_size, | |
305 prev->referer_hash_bucket_size, 64); | |
306 conf->referer_hash_bucket_size = ngx_align(conf->referer_hash_bucket_size, | |
307 ngx_cacheline_size); | |
308 | |
279 hash.key = ngx_hash_key_lc; | 309 hash.key = ngx_hash_key_lc; |
280 hash.max_size = 2048; /* TODO: referer_hash_max_size; */ | 310 hash.max_size = conf->referer_hash_max_size; |
281 hash.bucket_size = 64; /* TODO: referer_hash_bucket_size; */ | 311 hash.bucket_size = conf->referer_hash_bucket_size; |
282 hash.name = "referers_hash"; | 312 hash.name = "referers_hash"; |
283 hash.pool = cf->pool; | 313 hash.pool = cf->pool; |
284 | 314 |
285 if (conf->keys->keys.nelts) { | 315 if (conf->keys->keys.nelts) { |
286 hash.hash = &conf->hash.hash; | 316 hash.hash = &conf->hash.hash; |