2010-10-16 3 views
0

Je déploie tordu comme un serveur web pour mon site. Je regarde dans les possibilités de proxy inverse.Twisted + Django + Reverse Proxy

J'ai maintenant le code suivant branché à mon réacteur pour django. J'utilise la comète, et je me rends compte que je dois absolument utiliser le port 80 donc je suis à la recherche de possibilités de proxy inverse. Sur ce site, j'ai trouvé l'exemple suivant:

# Django setup 
sys.path.append("shoout_web") 
os.environ['DJANGO_SETTINGS_MODULE'] = 'shoout_web.settings' 

def wrapper_WSGIRootWrapper(): 
    # Build the wrapper first 
    generic = WSGIHandler() 
    def HandlerWrapper(environ, start_response): 
     environ['engine'] = engine 
     return generic(environ, start_response) 

    # Thread and Allowing Ctrl-C to get you out cleanly: 
    pool = threadpool.ThreadPool() 
    pool.start() 
    reactor.addSystemEventTrigger('after', 'shutdown', pool.stop) 
    return wsgi.WSGIResource(reactor, pool, HandlerWrapper) 
WSGIRoot = wrapper_WSGIRootWrapper() 

# Reverse Proxy 
class Simple(Resource): 
    isLeaf = False 

    def getChild(self, name, request): 
     if name == "orbited": 
      print "orbited" 
      return proxy.ReverseProxyResource('localhost', 12345, "/"+name) 
     else: 
      return WSGIRoot.getChildWithDefault(name, request) 

# Attaching proxy + django 
log_dir = './.log' 
if not os.path.exists(log_dir): 
    os.makedirs(log_dir) 
reactor.listenTCP(DJANGO_PORT, server.Site(Simple(), logPath=os.path.join(log_dir, '.django.log'))) 

Mon problème est que je ne sais pas vraiment quoi remplir dans la partie autre de cette deuxième partie de code. J'ai regardé text_proxy sur twisted-src et il n'y avait pas d'exemples substantiels pour cela. De l'aide?

Répondre

1

Il n'est pas clair pour moi pourquoi vous voulez utiliser un proxy inverse. Je pense que vous essayez d'utiliser le bon outil pour les mauvaises raisons.

Le reverse proxy est utile car vous pouvez avoir un serveur léger comme nginx gérer des milliers de connexions http keep-alive avec un minimum de mémoire. Les connexions entre le proxy inverse et le serveur web réel (tordu dans votre cas) sont moins nombreuses et de courte durée en comparaison, vous pouvez donc gérer des charges plus élevées. Notez que si vous utilisez des connexions de comètes de longue durée, il n'y a aucun avantage ici, car vous avez besoin que la connexion soit ouverte sur les deux serveurs pour la durée.

Vous semblez vouloir l'utiliser pour simplement rendre le serveur sur le port 12345 disponible sur le port 80. Ce n'est pas ce à quoi sert un proxy inverse. Pourquoi ne pas simplement lier le port 80 en premier lieu?

+0

Eh bien, j'ai le port 80 en cours d'exécution django. Mon serveur de comète est en cours d'exécution sur le port 12345. La plupart des entreprises bloquent ce port non standard. J'ai donc regardé dans le proxy inverse http://mysite.com:80/orbited/* -> localhost: 12345/* (en ce qui concerne le serveur) et http://mysite.com:80/* (sauf la première règle) pour aller à localhost: 80/* (pour django) – disappearedng

+0

La partie else que vous avez demandé, c'est là que vous reverse-proxy au serveur exécutant django (disons sur le port 8080, parce que le port 80 est votre proxy. Si vous exécutez django avec Apache comme la plupart des gens, vous pouvez simplement utiliser Apache (sur le port 80) pour effectuer des requêtes proxy inverse pour/orbited au serveur comète.Vous pouvez le faire avec à peu près n'importe quelle configuration serveur. , vérifiez pour/orbited, reverse-proxy pour comet server, else pour django J'ai besoin de détails spécifiques sur votre configuration pour vous donner des conseils plus précis, mais vous devriez avoir l'idée générale. – Eloff

Questions connexes