SOLUTION: How to pass REMOTE_ADDR through Apache
Several months ago I was looking for solution how to pass REMOTE_ADDR inside proxied environment with Apache acting as frontend. Nobody has the solution ready and now I have one. Pretty simple but requires adding 6 lines in def __call__ (...) of VirtualHostMonster.py (you are using VH Monster I hope :) A new solution has come. Visit your ~zope/lib/python/Products/SiteAccess and change VirtualHostMonster.py adding these lines after def __call__(self, client, request, response=None): so it becomes def __call__(self, client, request, response=None): '''Traversing at home''' vh_used = 0 stack = request['TraversalRequestNameStack'] while 1: if stack and stack[-1] == 'VirtualHostBase': vh_used = 1 stack.pop() protocol = stack.pop() host = stack.pop() if ':' in host: host, port = split(host, ':') request.setServerURL(protocol, host, port) else: request.setServerURL(protocol, host) #-------- HERE CODE BEGINS -------- if stack and stack[-1] == "_set_": stack.pop() names = split (stack.pop(), "#") values = split (stack.pop(), "#") for ix in range (len (names)): request.set (names[ix], values[ix]) #--------- HERE CODE ENDS --------- And modify your RewriteRule in Apache virtual host so it looks as: RewriteRule ^/(.*) http://127.0.0.1:8080/VirtualHostBase/http/www.yourhost.com:80/_set_/REMOTE_IP#PROXIED_FOR/%{REMOTE_ADDR}#%{HTTP_X_FORWARDED_FOR}/$1 [P,L] That's it. This RewriteRule adds two variables to Zope REQUEST: REMOTE_IP and PROXIED_FOR which contain demanded values. And do not forget to refresh SiteAccess product or restart whole Zope. -- Sincerely, Dmitry mailto:deadq@bkzebra.com
participants (1)
-
Dmitry Litovchenko