[Zope] Re: [Zope-dev] ProxyPass and SiteAccess getting REMOTE_ADDR

Ragnar Beer rbeer@uni-goettingen.de
Tue, 13 Feb 2001 15:28:26 +0100


Did you read about the via-patch?
The address is http://www.zope.org/Members/unfo/apache_zserver_ssl.

HTH

Raganr

>Last week I was setting up an Apache VirtualHost to point to a Zope
>object tree using the ProxyPass directive and SiteAccess to get all the
>urls right (great stuff!).
>
>However, I noticed that the REMOTE_ADDR was always set to the
>proxy host.  This makes sense because Zope just gets the host/port from
>the socket connection.  But I needed the real remote_addr for logging
>and user admin.  Adding 'Header's wouldn't pass the info to Zope.
>
>The Zope mail archives mentioned the problem a couple of times without
>a configuration fix.
>
>A simple fix to the proxy module (in proxy_http.c) will create a new
>header called 'Original-Addr' to contain the client's ip address.
>
>Here is a context diff against Apache 1.3.14 that should work even
>in the new 2.0 servers:
>
>***************
>*** 397,402 ****
>--- 397,404 ----
>        ap_bvputs(f, reqhdrs[i].key, ": ", reqhdrs[i].val, CRLF, NULL);
>      }
> 
>+       ap_bvputs(f, "Original-Addr: ", r->connection->remote_ip, CRLF, NULL);
>+
>      ap_bputs(CRLF, f);
>  /* send the request data, if any. */
>
>
>When the request was proxied, the Zope REQUEST will now have a key
>'HTTP_ORIGINAL_ADDR' containing the client address.
>
>This key is also now a good indication that the http request went to
>the VirtualHost address. 
>
>I then made a small change to SiteRoot.py to turn off the url mapping if
>HTTP_ORIGINAL_ADDR is present.  This is a context diff against the
>SiteRoot.py file shipped with Zope 2.3.0:
>
>***************
>*** 108,113 ****
>--- 108,116 ----
>          if '_SUPPRESS_SITEROOT' in _swallow(request):
>              request.setVirtualRoot(request.steps)
>              return
>+         # only run if passed through ProxyPass
>+         t = request.environ.get('HTTP_ORIGINAL_ADDR',None)
>+         if t == None : return
>          srd = [None, None]
>          for i in (0, 1):
>              srp = ('SiteRootBASE', 'SiteRootPATH')[i]
>
>
>These two patches have worked well and solved several problems.  I hope
>others will find them useful.
>
>--Bill Noon
>Northeast Regional Climate Center
>Cornell University
>
>
>
>_______________________________________________
>Zope-Dev maillist  -  Zope-Dev@zope.org
>http://lists.zope.org/mailman/listinfo/zope-dev
>**  No cross posts or HTML encoding!  **
>(Related lists -
> http://lists.zope.org/mailman/listinfo/zope-announce
> http://lists.zope.org/mailman/listinfo/zope )