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

212 投票
11 回答
179993 浏览
提问于 2025-04-15 19:16

我按照这里的说明,使用内置的网络服务器运行Django,成功地用python manage.py runserver命令启动了它。当我从网络服务器本地访问127.0.0.1:port时,能看到Django页面,说明它运行正常。

我知道Django的网络服务器并不适合用在生产环境,但对我来说,能从外部访问它很重要——也就是说,不是从服务器上的浏览器访问,而是从另一台电脑访问。

我尝试了:

http://mywebserver:port_django_runs_on

但没有成功。我还尝试用IP地址(根据ifconfig命令)来访问:

http://myipaddress:port_django_runs_on 

但也没有成功。

网络服务器是运行着的,所以应该能从外部访问,只是我不太确定该怎么做。我在使用Linux和Apache,不过我还没有把Django和Apache配置在一起。

有没有什么办法可以做到这一点?

11 个回答

15

选择一个或多个可能的原因:

  • 你的应用程序没有成功监听指定的IP和端口:
    • 可能是因为你没有正确配置它。
    • 可能是因为用户没有权限。
  • 你的应用程序在指定的IP和端口上成功监听,但客户端无法访问,因为:
    • 服务器的本地iptables设置阻止了访问。
    • 防火墙阻止了访问。

所以,你可以通过在机器上以root身份运行 lsof -i 来检查你的应用程序是否成功监听,并查找与指定端口对应的 python 记录。

一般来说,非root用户无法绑定到小于1024的端口。

你需要查看 iptables -nvL 来确认是否有规则阻止你想要绑定的IP和端口的访问。

如果有一个上游防火墙,而你对它不太了解,你需要和你的网络管理员沟通。

39

为了让它正常工作,我需要在settings.py文件里加这一行(否则从其他电脑访问时会出现错误)

ALLOWED_HOSTS = ['*']

然后用下面的命令启动服务器:

python manage.py runserver 0.0.0.0:9595

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

368

你需要启动开发服务器,让它能够在你的网络接口上接收请求。

比如说:

python manage.py runserver 0.0.0.0:8000

这样就能在所有接口的8000端口上接收请求。

无论你是用IP地址还是主机名访问这个网页服务器都没关系。我猜你还是在自己的局域网里。
如果你真的想从外部访问这个服务器,你还需要配置你的路由器,把比如说8000端口转发到你的服务器上。


检查一下你服务器上的防火墙,确保允许对正在使用的端口的外部连接!

假设你能成功从外部访问你的Apache服务器,你还可以尝试以下操作:

  • 先停止Apache服务器,这样80端口就可以使用了。
  • 然后用sudo python manage.py runserver 0.0.0.0:80启动开发服务器。

撰写回答