mirror of
https://github.com/nginx/nginx.git
synced 2024-11-28 16:39:00 +08:00
Realip: fixed duplicate processing on redirects (ticket #1098).
Duplicate processing was possible if the address set by realip was listed in set_realip_from, and there was an internal redirect so module context was cleared. This resulted in exactly the same address being set, so this wasn't a problem before the $realip_remote_addr variable was introduced, though now results in incorrect $realip_remote_addr being picked. Fix is to use ngx_http_realip_get_module_ctx() to look up module context even if it was cleared. Additionally, the order of checks was switched to check the configuration first as it looks more effective.
This commit is contained in:
parent
88dc647481
commit
52892835ef
@ -141,18 +141,18 @@ ngx_http_realip_handler(ngx_http_request_t *r)
|
||||
ngx_http_realip_ctx_t *ctx;
|
||||
ngx_http_realip_loc_conf_t *rlcf;
|
||||
|
||||
ctx = ngx_http_get_module_ctx(r, ngx_http_realip_module);
|
||||
|
||||
if (ctx) {
|
||||
return NGX_DECLINED;
|
||||
}
|
||||
|
||||
rlcf = ngx_http_get_module_loc_conf(r, ngx_http_realip_module);
|
||||
|
||||
if (rlcf->from == NULL) {
|
||||
return NGX_DECLINED;
|
||||
}
|
||||
|
||||
ctx = ngx_http_realip_get_module_ctx(r);
|
||||
|
||||
if (ctx) {
|
||||
return NGX_DECLINED;
|
||||
}
|
||||
|
||||
switch (rlcf->type) {
|
||||
|
||||
case NGX_HTTP_REALIP_XREALIP:
|
||||
|
Loading…
Reference in New Issue
Block a user