我按照这里的说明使用内置的web服务器运行Django,并且能够成功地使用python manage.py runserver运行它。如果我从web服务器本地访问127.0.0.1:port,我会得到Django页面,表明它工作。

我知道Django web服务器不是一个生产服务器,但是为了测试目的,能够从外部世界访问它是很重要的——也就是说,不是从服务器上的web浏览器,而是从另一台计算机。

我试着:

http://mywebserver:port_django_runs_on

但这并没有起作用。我还尝试使用IP代替(基于ifconfig)访问:

http://myipaddress:port_django_runs_on 

这也没有用。

网络服务器正在运行,所以它必须从外部访问,我只是不知道如何。我用Apache运行Linux,虽然我还没有用Apache配置Django。

有什么办法吗?


当前回答

从以下选项中选择一个或多个:

您的应用程序没有成功地侦听预期的IP:PORT 因为您没有成功地配置它 因为用户没有权限 您的应用程序成功地侦听了预期的IP:PORT,但客户端无法到达它,因为 服务器本地iptables可以阻止它。 防火墙阻止了它。

因此,您可以在机器上以root身份运行lsof -i,并使用指定的相应端口查找python条目,从而检查应用程序是否正在成功侦听。

非root用户一般不能绑定小于1024的端口。

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

如果存在上游防火墙,而您对其了解不多,则需要与网络管理员交谈。

其他回答

如果你正在使用Docker,你需要确保端口也是公开的

您必须运行开发服务器,以便它在与您的网络的接口上侦听。

E.g.

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启动开发服务器

你只需要允许任何主机: settings.py:

ALLOWED_HOST = ['*']

运行服务器:

python3 manage.py runserver 0.0.0.0:8000

如果你想连接android应用程序,只需在AndroidManifest中添加互联网权限 这是我的工作;)

从以下选项中选择一个或多个:

您的应用程序没有成功地侦听预期的IP:PORT 因为您没有成功地配置它 因为用户没有权限 您的应用程序成功地侦听了预期的IP:PORT,但客户端无法到达它,因为 服务器本地iptables可以阻止它。 防火墙阻止了它。

因此,您可以在机器上以root身份运行lsof -i,并使用指定的相应端口查找python条目,从而检查应用程序是否正在成功侦听。

非root用户一般不能绑定小于1024的端口。

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

如果存在上游防火墙,而您对其了解不多,则需要与网络管理员交谈。

我要在这里加上这个:

Sudo python manage.py runserver 80 打开你的手机或电脑,在浏览器中输入你电脑的内部IP地址(例如192.168.0.12)。

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

这也应该工作没有sudo:

python manage.py runserver 0.0.0.0:8000