Any mod_proxy user who could have a look at this / finds this useful?

Cheers,
Stephan

On Wed, 2009-08-05 at 14:40 +0200, Stephan A. Rickauer wrote:
> This diff backports and documents the ProxyPass negation found in
> apache2, useful for excluding subdirs from being proxied, e.g.
> 
>   ProxyPass /foo/bar !
>   ProxyPass /foo/ http://backend/foo/
> 
> I run this patch in production on a loaded i386 reverse proxy without
> any troubles. Spacing corrections by st...@.
> 
> 
> Index: htdocs/manual/mod/mod_proxy.html
> ===================================================================
> RCS file: /cvs/src/usr.sbin/httpd/htdocs/manual/mod/mod_proxy.html,v
> retrieving revision 1.9
> diff -u -r1.9 mod_proxy.html
> --- htdocs/manual/mod/mod_proxy.html  1 Aug 2006 12:53:59 -0000       1.9
> +++ htdocs/manual/mod/mod_proxy.html  5 Aug 2009 12:17:58 -0000
> @@ -467,7 +467,7 @@
>      directive</h2>
>      <a href="directive-dict.html#Syntax"
>      rel="Help"><strong>Syntax:</strong></a> ProxyPass <em>path
> -    url</em><br />
> +    !|url</em><br />
>       <a href="directive-dict.html#Default"
>      rel="Help"><strong>Default:</strong></a> <em>None</em><br />
>       <a href="directive-dict.html#Context"
> @@ -499,6 +499,19 @@
>      &lt;<samp>http://wibble.org/mirror/foo/bar</samp>&gt; to be
>      internally converted into a proxy request to
>      &lt;<samp>http://foo.com/bar</samp>&gt;.</p>
> +
> +    <p>The <code>!</code> directive is useful when you don't want
> +    to reverse-proxy a subdirectory, <em>e.g.</em></p>
> +<pre>
> +    ProxyPass /mirror/foo/bar !
> +    ProxyPass /mirror/foo http://backend.site.com
> +</pre>
> +    <p>will proxy all requests to <samp>/mirror/foo</samp> to
> +    <samp>backend.site.com</samp> <em>except</em> requests made to
> +    <samp>/mirror/foo/bar</samp>.</p>
> +
> +    <p><strong>Note:</strong> Order is important. You need to put the
> +    exclusions <em>before</em> the general ProxyPass directive.</p>
>  
>      <p><strong>Warning:</strong> The <code><a
>      href="#proxyrequests">ProxyRequests</a></code> directive should
> Index: src/modules/proxy/mod_proxy.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/httpd/src/modules/proxy/mod_proxy.c,v
> retrieving revision 1.16
> diff -u -r1.16 mod_proxy.c
> --- src/modules/proxy/mod_proxy.c     9 May 2008 08:06:28 -0000       1.16
> +++ src/modules/proxy/mod_proxy.c     5 Aug 2009 12:17:58 -0000
> @@ -200,6 +200,10 @@
>          len = alias_match(r->uri, ent[i].fake);
>  
>          if (len > 0) {
> +            if ((ent[i].real[0] == '!') && (ent[i].real[1] == 0)) {
> +                return DECLINED;
> +            }
> +
>              r->filename = ap_pstrcat(r->pool, "proxy:", ent[i].real,
>                                       r->uri + len, NULL);
>              r->handler = "proxy-server";

Reply via email to