AWS - 运行webservice - Cherrypy + Python

时间:2011-04-01 14:10:06

标签: python web-services amazon-ec2 cherrypy

我在ec2中有一个linux机箱(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

这意味着,webservice将仅针对本地计算机运行。如何设置服务0.0.0.0(即,为任何IP地址提供服务?)

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

编辑2: 哦,找到解决方案:-)必须在cherrypy.quickstart()调用

之前添加它
cherrypy.config.update({'server.socket_host': '0.0.0.0',
                        'server.socket_port': 80,
                       })

1 个答案:

答案 0 :(得分:1)

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

此外,由于您控制服务器,您可以配置反向代理以将请求路由到CherryPy应用程序。这为您提供了相当大的灵活性。例如,如果您愿意,可以并行运行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;
  }
}