我有Django应用程序。它在EC2上运行。 EC2具有私有IP地址和弹性公共IP地址。
我希望网络应用在本地可用,以及开发人员在网络外的IP地址。
让我们将这三个IP地址定义为:
EC2_PRIVATE_IP
EC2_PUBLIC_IP
DEVELOPER_IP
所以我所做的是在EC2上运行:
python manage.py runserver 0.0.0.0:8000
进入我的EC2安全设置,并打开入站和出站端口8000到DEVELOPER_IP。
然后要求开发人员在他的浏览器上转到EC2_PUBLIC_IP地址。
不幸的是,当他收到错误时,它不起作用:
Gateway Timeout: can't connect to remote host
我之前尝试过:
python manage.py runserver {EC2_PUBLIC_IP}:8000
但是我得到了错误:
Error: That IP address can't be assigned-to.
答案 0 :(得分:6)
应使用以下网址启动服务器
python manage.py runserver 0.0.0.0:8000
在EC2安全设置中,在INBOUND设置中添加以下内容
HTTP TCP 8000 0.0.0.0/0
然后你应该使用URL
访问这台机器http://EC2_PUBLIC_IP:8000
如果您想以
的身份访问网址http://EC2_PUBLIC_IP
然后在端口80上运行您的网络服务器,并相应地更改EC2安全设置。
答案 1 :(得分:1)
这里的所有答案都给出了解决方案,我想发布此内容以便完整。
默认情况下,runserver命令在端口8000的内部IP上启动开发服务器。
如果要更改服务器的端口(用于Internet访问的标准端口为80),请将其作为命令行参数传递。例如,此命令在端口80上启动服务器:
$ python manage.py runserver 80
注意:您不希望用户在浏览器中的网址后输入:port_number 。另一件事是您可能不是主机的所有者,因此您可能无权配置防火墙设置以允许其他端口超过80.
如果要更改服务器的IP,请将其与端口一起传递。因此,要收听所有公共IP(如果您想在网络上的其他计算机上展示您的工作,这非常有用),请使用:
$ python manage.py runserver 0.0.0.0:80
可以找到有关开发服务器所需知识的文档here。
答案 2 :(得分:0)
从您的出站安全组中删除所有规则,并替换为"所有流量"宽容规则。
您的计算机正在获取入站数据包,但安全过滤器会拒绝其回复。您的开发人员将使用(semi-) arbitrary source port number发送数据包。
(另外,您无法绑定到EC2实例上的公共地址,因为它是由路由基础设施从私有地址转换而来的,所以它实际上并不是" on&# 34;你的盒子。)
答案 3 :(得分:0)
确保您的防火墙没有阻止任何内容。
尝试
iptable -F
这将删除计算机本身的所有防火墙规则。
编辑:但是,你不应该使用它。如果要为防火墙添加端口,请使用以下表示如果您正在运行基于redhat的发行版(例如centos,rhel)
system-config-firewall
如果不存在,请尝试安装
# yum install system-config-firewall # run it after becoming a root
答案 4 :(得分:0)
除了添加防火墙规则以允许流量到端口8000 /其他
您必须运行开发服务器,以便它监听所有接口上的请求,而不仅仅是本地接口上的请求
python manage.py runserver 0.0.0.0:8000
或您可以选择的任何其他端口
答案 5 :(得分:0)
让Django应用程序在本地运行并尝试在ec2实例中安装nginx并将端口80上的流量代理到localhost:8000。 像这样:
server {
listen 80;
server_name www.yoursite.com;
client_max_body_size 1000M;
location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_connect_timeout 1000;
proxy_read_timeout 1000;
proxy_pass http://127.0.0.1:8080/; # This is the trick !
proxy_buffering off;
proxy_set_header Connection '';
proxy_http_version 1.1;
chunked_transfer_encoding off;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS';
}
}
您可以添加控件以仅为开发人员IP提供服务。 Nginx是一款轻巧,快速,安全,轻便的产品。可扩展的Web /代理服务器。世界上最繁忙的网站使用NGINX! 它将作为服务运行,它将监听来自外部世界(Internet)的所有流量,在您的情况下,您可能希望告诉它侦听Web(端口80)流量,并将其重定向到您的Django app(在端口8000上运行);这是一个不错的主意,它是透明的,而且,如果调整得很好,它将增强您的网站! 此外,Nginx非常适合网络和移动应用交付。 nginx的安装和配置非常简单,您应该将类似于上面示例的内容集成到它中,以使您的应用程序对Internet开放。
答案 6 :(得分:0)
我明白了。我也需要在Windows防火墙上打开端口!