在Amazon EC2上启动http-server
我正在尝试在亚马逊的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端口,由你的脚本来处理。