【发布时间】:2011-11-03 17:39:39
【问题描述】:
我想使用cherrypy 在两个单独的端口上提供两个单独的类。一个类是私有的,希望它仅在被防火墙阻止的端口上提供服务,并希望使用需要凭据的服务器。另一个我想公开。
这是我的代码:
import cherrypy
from cherrypy import _cpserver
from cherrypy import _cpwsgi_server
class TestPublic:
@cherrypy.expose
def index(self):
return 'welcome!'
class TestPrivate:
@cherrypy.expose
def index(self):
return 'secret!'
if __name__ == '__main__':
users = {'admin':'password'}
config1 = {'/':{
'server.thread_pool' : 50,
'server.environment' : 'production',
}}
config2 = {'/admin':{
'server.thread_pool' : 50,
'tools.digest_auth.on': True,
'tools.digest_auth.realm': 'Some site',
'tools.digest_auth.users': users,
}}
cherrypy.server.unsubscribe()
cherrypy.tree.mount(TestPublic(), script_name ='/', config=config1)
cherrypy.tree.mount(TestPrivate(), script_name ='/admin', config=config2)
server1 = _cpserver.Server()
server2 = _cpserver.Server()
server1.bind_addr = ('0.0.0.0', 8080)
server2.bind_addr = ('0.0.0.0', 8888)
adapter1 = _cpserver.ServerAdapter(cherrypy.engine, server1)
adapter2 = _cpserver.ServerAdapter(cherrypy.engine, server2)
adapter1.subscribe()
adapter2.subscribe()
cherrypy.engine.start()
cherrypy.engine.block()
它最终在 8888 上不提供任何服务,而是在端口 8080 上为私有类提供服务!
我使用的是cherrypy 3.1.2
【问题讨论】:
-
为什么不使用两个独立的服务器?无论如何,从安全的角度来看,这可能是必要的,因为有权访问私有内容的服务器可以作为不同的 uid 运行。
-
@Celada 这就是我认为我正在做的事情。 server1 和 server2 是单独的服务器实例。你还有别的想法吗?
-
我认为使用 vhost 调度程序可以帮助您。 request.dispatch = cherrypy.dispatch.VirtualHost(**{...})
-
我的意思(并且应该说)是两个完全独立的 Python 脚本,每个服务器一个。不过 Anders Waldenborg 的建议看起来很有趣,您可以先尝试一下。