Cherrypy服务器无法从localhost以外的任何地方访问

2 投票
2 回答
3961 浏览
提问于 2025-04-15 15:01

我在使用cherrypy的时候遇到了一个问题,看起来已经解决了,但实际上并没有成功。我只能在本地(localhost或127.0.0.1)上绑定。我的系统是Windows XP Home和Mac OS X(Linux还没测试),使用的是cherrypy 3.1.2和python 2.5.4。这是我应用程序的结尾部分:

global_conf = {
       'global':    { 'server.environment= "production"'
                      'engine.autoreload_on : True'
                      'engine.autoreload_frequency = 5 '
                      'server.socket_host': '0.0.0.0',
                      'server.socket_port': 8080}
    }
cherrypy.config.update(global_conf)
cherrypy.tree.mount(home, '/', config = application_conf)
cherrypy.engine.start()

2 个回答

3

如果你在使用双栈操作系统,可能会出现localhost解析为::1(IPv6的本地地址),而不是127.0.0.1(IPv4的本地地址)。你可以试着用http://127.0.0.1:8080来访问服务器。

另外,如果你的操作系统支持双栈,你可以把server.socket_host设置为'::',这样它就会同时监听IPv6和IPv4的所有地址。

7

嗯,你在使用字典的时候有些地方搞错了:

>>> global_conf = {
...        'global':    { 'server.environment= "production"'
...                       'engine.autoreload_on : True'
...                       'engine.autoreload_frequency = 5 '
...                       'server.socket_host': '0.0.0.0',
...                       'server.socket_port': 8080}
...     }
>>> print global_conf
{'global': 
   {'server.environment= "production"engine.autoreload_on : Trueengine.autoreload_frequency = 5 server.socket_host': '0.0.0.0',
    'server.socket_port': 8080}
}

更具体来说,你的字典定义里缺少了逗号和冒号。每一对键和值之间必须有一个冒号,而且它们之间要用逗号分开。像这样可能就能正常工作:

global_conf = {
       'global':    { 'server.environment': 'production',
                      'engine.autoreload_on': True,
                      'engine.autoreload_frequency': 5,
                      'server.socket_host': '0.0.0.0',
                      'server.socket_port': 8080,
                    }
              }

想了解更多信息,可以查看Python的字典文档

撰写回答