[PATCH] fixed an "IfIsEvil" example that ngx_proxy did not inherit plcf->location

agentzh agentzh at gmail.com
Sun Jun 24 05:10:13 UTC 2012


Hello!

The standard ngx_proxy module does not inherit the location config's
"location" field for the "location if" block in
ngx_http_proxy_merge_loc_conf, making the following config example
fail mentioned on the "IfIsEvil" page:

    # request will be sent to backend without uri changed
    # to '/' due to if

    location /proxy-pass-uri {
        proxy_pass http://127.0.0.1:8080/;

        set $true 1;
        if ($true) {
            # nothing
        }
    }

Below is a patch for nginx 1.2.1 that attempts to fix this issue.
Comments welcome!

Thanks!
-agentzh

--- nginx-1.2.1/src/http/modules/ngx_http_proxy_module.c	2012-04-23
18:40:01.000000000 +0800
+++ nginx-1.2.1-patched/src/http/modules/ngx_http_proxy_module.c	2012-06-24
12:48:57.289834450 +0800
@@ -3023,8 +3023,10 @@

     if (conf->upstream.upstream || conf->proxy_lengths) {
         clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
-        if (clcf->handler == NULL && clcf->lmt_excpt) {
-            clcf->handler = ngx_http_proxy_handler;
+        if (clcf->handler == NULL) {
+            if (clcf->lmt_excpt) {
+                clcf->handler = ngx_http_proxy_handler;
+            }
             conf->location = prev->location;
         }
     }
-------------- next part --------------
A non-text attachment was scrubbed...
Name: nginx-1.2.1-location_if_inherits_proxy.patch
Type: application/octet-stream
Size: 674 bytes
Desc: not available
URL: <http://mailman.nginx.org/pipermail/nginx-devel/attachments/20120624/eff93fbb/attachment.obj>


More information about the nginx-devel mailing list