如何从外部访问本地Django Web服务器


181

我按照此处的说明使用内置的网络服务器运行Django,并能够使用成功运行它python manage.py runserver。如果我从Web服务器本地访问127.0.0.1:port,则将显示Django页面,表明它可以工作。

我意识到Django网络服务器不是生产服务器,但对我而言,测试至关重要的是,它可以从外部环境进行访问-即,不是从服务器上的Web浏览器而是从其他计算机上进行访问。

我试过了:

http://mywebserver:port_django_runs_on

但它没有用。我还尝试使用IP(基于ifconfig)访问:

http://myipaddress:port_django_runs_on 

这也不起作用。

Web服务器正在运行,因此必须从外部可以访问它,但我不确定如何。我没有在Apache上配置Django,但我在Apache上运行Linux。

有关如何执行此操作的任何想法?


3
为什么不使用Apache和mod_wsgi配置Django?为什么不正确地做呢?
S.Lott

@ S.Lott如果服务器上有许多不同的项目要在不同的时间运行,又不想每次添加新项目都重新配置Apache,该怎么办?
robenkleene

Answers:


314

您必须运行开发服务器,以使其侦听网络接口

例如

python manage.py runserver 0.0.0.0:8000

在端口8000的每个接口上侦听。

使用IP或主机名访问Web服务器都没有关系。我猜您仍在自己的局域网中。
如果您确实要从外部访问服务器,则还必须将路由器配置为将端口转发到例如8000服务器。


检查服务器上的防火墙,是否允许使用中端口的传入连接!

假设您可以成功地从外部访问Apache服务器,则还可以尝试以下操作:

  • 停止Apache服务器,以便该端口80可用。
  • 使用以下命令启动开发服务器 sudo python manage.py runserver 0.0.0.0:80

1
使用“ python manage.py runserver 0.0.0.0:8000”仍然会得到相同的结果。您能否进一步说明如何配置Apache来处理此端口?

1
@ user248237:您运行开发服务器,这与Apache Web服务器完全无关。开发服务器是独立的Web服务器。
Felix Kling '02

使用端口80需要特殊特权。您可以尝试使用sudo python manage.py runserver 80
S.Lott

@ S.Lott:谢谢你。我知道,它是我写的,但不知何故不能输入键盘;)
Felix Kling 2010年

2
允许所有ALLOWED_HOSTS = ['*']为我工作的人都可以从我的Android手机访问Mac上的Django应用
Anupam

29

我必须将此行添加到settings.py才能使其正常工作(否则从另一台计算机访问时显示错误)

ALLOWED_HOSTS = ['*']

然后使用以下命令运行服务器:

python manage.py runserver 0.0.0.0:9595

还要确保防火墙允许连接到该端口


14

从以下选择一个或多个:

  • 您的应用程序未成功侦听预期的IP:PORT
    • 因为您尚未成功配置
    • 因为用户没有权限
  • 您的应用程序已在预期的IP:PORT上成功侦听,但客户端无法访问它,因为
    • 服务器本地iptables阻止了它。
    • 防火墙阻止了它。

因此,您可以通过lsof -i在计算机上以root用户身份运行来检查您的应用程序是否成功侦听,并查找python具有您指定的相应端口的条目。

非root用户通常不能绑定到<1024的端口。

您需要查看一下iptables -nvL是否存在阻止访问您要绑定应用程序的ip:port的规则。

如果有上游防火墙,而您对其了解不多,则需要与网络管理员联系。


你能解释一下you haven't configured it successfully吗?
ChillarAnand

@ChillarAnand:只需检查您是否django runserver确实在监听您想要的位置,例如使用lsof
MattH

@ChillarAnand我按照您指示的步骤进行了操作。使用lsof我看到我的端口的python条目。但是我的链接myip:8000没有响应。我知道它来晚了,但是任何建议都会有所帮助。
WaterRocket8236

9

只是这样做:

python manage.py runserver 0:8000

通过以上命令,您实际上是将其绑定到外部IP地址。因此,现在当您使用端口号访问IP地址时,就可以在浏览器中毫无问题地访问它。

只需在浏览器地址栏中输入以下内容:

<your ip address>:8000

例如:

192.168.1.130:8000

您可能需要编辑settings.py在最后一行的settings.py中添加以下内容:

ALLOWED_HOSTS = ['*']

希望这会有所帮助...


5

对于AWS用户。

我必须按照以下步骤到达目的地。

1)确保在sudo级别安装了pip和django

  • 须藤apt-get install python-pip
  • sudo pip安装Django

2)确保安全组入站规则包括端口80上的http(0.0.0.0/0)

  • 通过AWS控制台配置

3)将公共IP和DNS添加到ALLOWED_HOSTS

  • ALLOWED_HOSTS是一个列表对象,您可以在settings.py中找到
  • ALLOWED_HOSTS = [“ 75.254.65.19”,“ ec2-54-528-27-21.compute-1.amazonaws.com”]

4)在端口80上使用sudo启动开发服务器

  • 须藤python manage.py runserver 0:80

现在可以从以下任一站点访问该站点(不需要:80,因为http默认是):

  • [公共DNS],即ec2-54-528-27-21.compute-1.amazonaws.com
  • [公共IP],即75.254.65.19

3

我要在这里添加:

  1. sudo python manage.py runserver 80

  2. 转到您的电话或计算机,然后192.168.0.12在浏览器中输入计算机的内部IP(例如)。

此时,您应该已连接到Django服务器。

这也应该在没有sudo的情况下起作用:

python manage.py runserver 0.0.0.0:8000


0

2020年更新方法

python manage.py runserver yourIp:8000

ALLOWED_HOSTS = ["*"]

使用0.0.0.0:8000而不是自己的IP
Shayne

是的,两者都是正确的使用方式,取决于情况
Kashif

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.