Skip to main content
 首页 » 编程设计

python之AWS之运行网络服务之Cherrypy + Python

2025年05月04日11linjiqin

我在 ec2 中有一个 linux box(Ubuntu 10.10 服务器版)。我已经使用 cherrypy 框架编写了一个 web 服务。假设这是我编写的代码。

import sys 
sys.path.insert(0,'cherrypy.zip') 
import cherrypy 
from cherrypy import expose 
 
class Service: 
 
    @expose 
    def index(self): 
        return 'Hello World' 
 
cherrypy.quickstart(Service()) 

我已将此文件(cherrypy.zip 文件)复制到我的 ec2 实例中的/var/www。 [我应该告知我手动创建了 www 目录,因为它不存在]。然后我跑了

python webservice.py 

收到消息

[01/Apr/2011:13:50:04] ENGINE Bus STARTED 

但是,当我尝试运行时

(I have masked my public ip) 
ec2-1**-2**-1**-**.ap-southeast-1.compute.amazonaws.com/ 

在我的浏览器中,我连接失败。谁能告诉我哪里出错了?或者我应该做什么?

编辑: 好的,这是我发现的一些有趣的东西。当我做的时候

python webservice.py 

我明白了

ENGINE Serving on 127.0.0.1:8080 

这意味着,web 服务将只在本地机器上运行。如何设置服务 0.0.0.0(即服务任何 IP 地址?)

希望这个细节足以理解我面临的问题。请帮助:)

编辑 2: 哦,好吧,找到了解决方案 :-) 必须在 cherrypy.quickstart() 调用之前添加这个

cherrypy.config.update({'server.socket_host': '0.0.0.0', 
                        'server.socket_port': 80, 
                       }) 

请您参考如下方法:

cherrypy.quickstart 函数接受一个配置参数,它可以是字典、打开的配置文件或配置文件的路径。我赞成使用配置文件的路径,因为这样可以最大限度地减少您可能希望从启动脚本控制的设置的硬编码。

此外,由于您控制服务器,您可以配置反向代理以将请求路由到 CherryPy 应用程序。这给了你相当大的灵 active 。例如,如果您愿意,可以并行运行 CherryPy 应用程序的多个实例,每个实例都配置为监听不同的端口。

这是 nginx 的示例配置文件,指示它将请求转发到您的 CherryPy 应用程序的单个实例:

server 
{ 
  server_name your.hostname.com; 
 
  location / { 
    proxy_pass http://127.0.0.1:8080/; 
  } 
} 

这是一个示例配置文件,指示 nginx 在应用程序的两个实例之间进行负载平衡,这两个实例正在监听端口 33334 和 33335 的环回地址:

upstream myapps  { 
  server 127.0.0.1:33334; 
  server 127.0.0.1:33335; 
} 
 
server { 
  server_name your.hostname.com; 
 
  location / { 
    proxy_pass  http://myapps; 
  } 
}