如何 运行 在 EC2 上开发的 Django 可以访问互联网?
How to run Django in development on EC2 so that it is accessible to the internet?
我有 Django 应用程序。在 EC2 上是 运行。 EC2 有一个私有 IP 地址和一个弹性 public IP 地址。
我希望 Web 应用程序在本地可用以及开发者的 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
更新#1
我之前尝试过:
python manage.py runserver {EC2_PUBLIC_IP}:8000
但是我得到了错误:
Error: That IP address can't be assigned-to.
从出站安全组中删除所有规则并替换为 "all traffic" 许可规则。
您的机器正在接收入站数据包,但它的回复正在被安全过滤器丢弃。您的开发箱将发送一个带有 (semi-) arbitrary source port number.
的数据包
(此外,您不能绑定到 EC2 实例上的 public 地址,因为它是通过路由基础设施从私有地址转换而来的,所以它实际上不是 "on" 您的地址。)
确保您的防火墙没有阻止任何东西。
尝试
iptable -F
这将删除计算机本身的所有防火墙规则。
编辑:但是,您不应该使用它。如果你想在你的防火墙上添加一个端口,如果你是 运行 基于 redhat 的发行版(例如 centos、rhel)
,请使用以下命令
system-config-firewall
如果没有,请尝试安装它
# yum install system-config-firewall # run it after becoming a root
除了添加允许流量到端口 8000/其他的防火墙规则之外
您必须 运行 开发服务器,以便它监听所有接口上的请求,而不仅仅是本地接口上的请求
python manage.py runserver 0.0.0.0:8000
或您可以选择的任何其他端口
服务器应该从下面开始 url
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
如果您想以
的身份访问 url
http://EC2_PUBLIC_IP
然后 运行 您在端口 80 上的网络服务器并相应地更改 EC2 安全设置。
这里的所有答案都给出了解决方案,为了完整起见,我想post这个。
默认情况下,runserver 命令在端口 8000 的内部 IP 上启动开发服务器。
如果要更改服务器的端口(互联网访问的标准端口为 80),将其作为命令行参数传递。例如,此命令在端口 80 上启动服务器:
$ python manage.py runserver 80
注意:您不希望用户必须在浏览器中的 url 之后键入 :port_number。另一件事是您可能不是主机的所有者,因此您可能无权配置防火墙设置以允许 80 以外的其他端口。
如果要更改服务器的 IP,请将其与端口一起传递。所以要监听所有 public IP(如果你想在网络上的其他计算机上展示你的工作很有用),请使用:
$ python manage.py runserver 0.0.0.0:80
可以找到有关开发服务器的所有信息的文档here。
将 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/Proxy 服务器。世界上最繁忙的网站都在使用 NGINX!
它将 运行 作为服务,它将侦听来自外部世界(Internet)的所有流量,在您的情况下,您希望告诉它侦听网络(端口 80)流量,并重定向它到您的 Django 应用程序(运行ning 在端口 8000 上);这真是一个好主意,它是透明的,而且如果调整得当,它将为您的网站增光添彩!
此外,Nginx 非常适合 Web 和移动应用程序交付。 nginx 的安装和配置非常简单,您应该将类似上述示例的东西集成到它中,才能让您的应用程序打开互联网。
我想通了。我还需要在 Windows 防火墙上打开端口!
我有 Django 应用程序。在 EC2 上是 运行。 EC2 有一个私有 IP 地址和一个弹性 public IP 地址。
我希望 Web 应用程序在本地可用以及开发者的 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
更新#1
我之前尝试过:
python manage.py runserver {EC2_PUBLIC_IP}:8000
但是我得到了错误:
Error: That IP address can't be assigned-to.
从出站安全组中删除所有规则并替换为 "all traffic" 许可规则。
您的机器正在接收入站数据包,但它的回复正在被安全过滤器丢弃。您的开发箱将发送一个带有 (semi-) arbitrary source port number.
的数据包(此外,您不能绑定到 EC2 实例上的 public 地址,因为它是通过路由基础设施从私有地址转换而来的,所以它实际上不是 "on" 您的地址。)
确保您的防火墙没有阻止任何东西。
尝试
iptable -F
这将删除计算机本身的所有防火墙规则。
编辑:但是,您不应该使用它。如果你想在你的防火墙上添加一个端口,如果你是 运行 基于 redhat 的发行版(例如 centos、rhel)
,请使用以下命令system-config-firewall
如果没有,请尝试安装它
# yum install system-config-firewall # run it after becoming a root
除了添加允许流量到端口 8000/其他的防火墙规则之外
您必须 运行 开发服务器,以便它监听所有接口上的请求,而不仅仅是本地接口上的请求
python manage.py runserver 0.0.0.0:8000
或您可以选择的任何其他端口
服务器应该从下面开始 url
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
如果您想以
的身份访问 urlhttp://EC2_PUBLIC_IP
然后 运行 您在端口 80 上的网络服务器并相应地更改 EC2 安全设置。
这里的所有答案都给出了解决方案,为了完整起见,我想post这个。
默认情况下,runserver 命令在端口 8000 的内部 IP 上启动开发服务器。
如果要更改服务器的端口(互联网访问的标准端口为 80),将其作为命令行参数传递。例如,此命令在端口 80 上启动服务器:
$ python manage.py runserver 80
注意:您不希望用户必须在浏览器中的 url 之后键入 :port_number。另一件事是您可能不是主机的所有者,因此您可能无权配置防火墙设置以允许 80 以外的其他端口。
如果要更改服务器的 IP,请将其与端口一起传递。所以要监听所有 public IP(如果你想在网络上的其他计算机上展示你的工作很有用),请使用:
$ python manage.py runserver 0.0.0.0:80
可以找到有关开发服务器的所有信息的文档here。
将 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/Proxy 服务器。世界上最繁忙的网站都在使用 NGINX! 它将 运行 作为服务,它将侦听来自外部世界(Internet)的所有流量,在您的情况下,您希望告诉它侦听网络(端口 80)流量,并重定向它到您的 Django 应用程序(运行ning 在端口 8000 上);这真是一个好主意,它是透明的,而且如果调整得当,它将为您的网站增光添彩! 此外,Nginx 非常适合 Web 和移动应用程序交付。 nginx 的安装和配置非常简单,您应该将类似上述示例的东西集成到它中,才能让您的应用程序打开互联网。
我想通了。我还需要在 Windows 防火墙上打开端口!