[Twisted-web] mod_rewrite while persisting client ips
Miika Keskinen
weeti at usr.fi
Wed Oct 20 01:34:17 MDT 2004
Hi there.
I'm writing to the list in case someone finds this useful, I include short
ProxyIPResource-'hack' and corresponding rewriterule to set
request.client.host correctly :)
here it goes:
--snip--
from twisted.application import service, internet
from nevow import rend, loaders, appserver, vhost, inevow
from nevow import tags as T
"""
Example apache configuration
NameVirtualHost *
<VirtualHost *>
RewriteEngine on
RewriteRule (.*)/ http://localhost:8080/proxyip/%{REMOTE_HOST}/vhost/http/test.com/$1 [P]
ServerName test.com
</VirtualHost>
"""
class ProxyIPResource:
__implements__ = inevow.IResource,
def putChild(self, child, res):
setattr(self, 'child_%s' % (child,), res)
def locateChild(self, ctx, segments):
if len(segments) < 1:
return rend.NotFound
elif "child_%s" % (segments[0],) in self.__dict__:
return self.__dict__['child_%s' % (segments[0],)], segments[1:]
else:
request = inevow.IRequest(ctx)
request.client.host = segments[0]
prefixLen = len('/'+'/'.join(request.prepath)+'/'+'/'.join(segments[:1]))
request.path = '/'+'/'.join(segments[1:])
request.uri = request.uri[prefixLen:]
request.prepath = request.prepath[2:]
return self, segments[1:]
class Simple(rend.Page):
addSlash = True
docFactory = loaders.stan(
T.html[
T.body[
T.h1["hello"]
]
])
application = service.Application("Simple")
res = Simple()
vResource = vhost.VHostMonsterResource()
pResource = ProxyIPResource()
res.putChild('proxyip', pResource)
pResource.putChild('vhost', vResource)
internet.TCPServer(8080,
appserver.NevowSite(res)).setServiceParent(application)
--snip--
More information about the Twisted-web
mailing list