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

我按照指令在这里使用内置的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。

有什么办法吗?

162468 次浏览

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

如。

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

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

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

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

      非root用户通常不能绑定端口<1024.

      你需要查看iptables -nvL,看看是否有一个规则可以阻止访问你试图绑定应用程序的ip:port。

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

我要在这里加上这个:

  1. sudo python manage.py runserver 80

  2. 打开你的手机或电脑,在浏览器中输入你电脑的内部IP(例如192.168.0.12)。

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

这也应该工作没有sudo:

python manage.py runserver 0.0.0.0:8000

适用于AWS用户。

我必须使用以下步骤才能到达那里。

确保pip和django安装在sudo级别

  • Sudo 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"]

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

  • Sudo python manage.py runserver 0:80

站点现在可在以下任何一个(不需要:80,因为这是默认的http):

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

我必须将这一行添加到settings.py以使其工作(否则它在从另一台计算机访问时显示错误)

ALLOWED_HOSTS = ['*']

然后运行服务器:

python manage.py runserver 0.0.0.0:9595

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

只要这样做:

python manage.py runserver 0:8000

通过上面的命令,您实际上是将它绑定到外部IP地址。 所以现在当你访问你的IP地址和端口号时,你将能够在浏览器中访问它而没有任何问题

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

<your ip address>:8000

例如:

192.168.1.130:8000

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

ALLOWED_HOSTS = ['*']

希望这对你有所帮助…

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

< p > 2020年更新 TRY THIS WAY

python manage.py runserver yourIp:8000


ALLOWED_HOSTS = ["*"]

在终端中安装ngrok

sudo apt-get install -y ngrok-client

运行之后:

ngrok http 8000
or
ngrok http example.com:9000
你只需要允许任何主机: settings.py: < / p >
ALLOWED_HOST = ['*']

运行服务器:

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

打开终端
类型:ifconfig
查看ifconfig命令
的执行结果 使用inet IP ..应该是这样的。192.168.1.121或类似的192.168.x.x

现在像往常一样运行服务器,但这次指定inet IP
Python3 manage.py runserver 192.168.x. pyX:8000(用你的inet替换X)
还< br > 在settings.py < br > ALLOWED_HOSTS = ['*']