在亚马逊EC2上启动http服务器

7
我正在尝试在Amazon EC2实例上设置和访问简单的Python http服务器。该服务器在本地localhost:80下工作,但是我无法使其在EC2实例上工作。
我将弹性IP连接到了实例上,并且至少可以通过该IP访问ssh。
我认为问题在于我错误地设置了HTTPServer的server_address: Python HTTPServer documentation 由于我真的一点都不清楚,在家里我配置了路由器将HTTP请求转发到计算机的本地IP 192.168.1.xx。
我认为可能是安全组的问题,因此我添加了入站HTTP并将源设置为0.0.0.0/0(我认为应该允许所有传入的IP),并设置端口80而没有任何更改选项。
另外,我认为在sudo下在端口80上运行服务器脚本是潜在的安全风险。是否有办法将请求转发到另一个端口,例如8080而不是80?

Python的HTTPServer可能不会放弃特权,因此以root身份运行不安全。您的设置是什么?您是否尝试从EC2实例访问托管在计算机上的HTTPServer? - tangrs
你在HTTPServer的参数server_address中使用了什么?如果其他人要使用此服务/网站,你应该在其前面放置类似nginx或apache的东西。另外,考虑使用像flask这样的库,它可以让你的生活更轻松。 - LoveGandhi
2个回答

3

对于安全组,您可以创建一个规则来允许端口8080(进行“Custome TCP Rule”,然后将端口范围设置为8080)。

看起来您的HTTPServer绑定了环回地址。我建议将地址设置为0.0.0.0(所有接口),将端口设置为8080,并在安全组中开放8080端口。


3

从安全角度考虑,最好在常规http服务器后面运行脚本。

以下是适用于NginX的配置文件,应该可以帮助您入门(将此文件放在/etc/nginx/conf.d/中):

upstream myscript  {
  server localhost:8080;
}

server {
    server_name _;
    listen 80;
    location = / {
        proxy_pass  http://myscript;
    }
}

在这种情况下,您在端口8080上运行脚本(使用server_address = ('localhost', 8080) 在Python脚本中配置您的HTTPServer)。因此,当一个请求在端口80上到达nginx时,它会转发到本地计算机的端口8080,其中您的脚本接管处理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接