在Amazon EC2上启动http-server

7 投票
2 回答
4582 浏览
提问于 2025-04-17 17:22

我正在尝试在亚马逊的EC2实例上设置和访问一个简单的Python HTTP服务器。这个服务器在本地的localhost:80上可以正常工作,但我在EC2实例上却无法让它运行。

我给这个实例连接了一个弹性IP,至少可以通过这个IP访问SSH。

我觉得问题可能出在我设置HTTPServer的服务器地址上不对:Python HTTPServer文档。因为我真的不太懂,所以在家里我把路由器配置成把HTTP请求转发到电脑的本地IP,192.168.1.xx。

我想这可能是安全组的问题,所以我添加了入站HTTP规则,源地址是0.0.0.0/0(我认为这应该允许所有的入站IP),并且设置了端口80,没有其他选项可以更改。

另外,我觉得在端口80上用sudo运行服务器脚本可能会有安全风险。有没有办法把请求转发到其他端口,比如8080,而不是80?

2 个回答

3

对于安全组,你可以创建一个规则,允许使用8080端口(选择“自定义TCP规则”,然后把端口范围设置为8080)。

听起来你的HTTP服务器可能是绑定在本地地址上。我建议把地址设置为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端口(在你的python脚本中使用server_address = ('localhost', 8080)来配置你的HTTPServer)。

所以,当有请求到达nginx的80端口时,它会把请求转发到本地的8080端口,由你的脚本来处理。

撰写回答