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

160 python django

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

我意识到Django网络服务器不是一个生产服务器,但是对于我来说,测试目的对于能够从外部世界访问它很重要 - 即不是来自服务器上的Web浏览器,而是来自不同的计算机.

我试过了:

http://mywebserver:port_django_runs_on
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我也尝试使用IP代替(基于ifconfig)来访问:

http://myipaddress:port_django_runs_on 
Run Code Online (Sandbox Code Playgroud)

这也没用.

Web服务器正在运行,因此必须可以从外部访问,我只是不确定如何.我正在使用Apache运行Linux,尽管我没有使用Apache配置Django.

关于如何做到这一点的任何想法?

Fel*_*ing 283

您必须运行开发服务器,以便它侦听网络接口.

例如

python manage.py runserver 0.0.0.0:8000
Run Code Online (Sandbox Code Playgroud)

侦听端口8000 上的每个接口.

使用IP或主机名访问Web服务器无关紧要.我猜你还在自己的局域网中.
如果您确实想从外部访问服务器,则还必须配置路由器以将端口转发8000到您的服务器.


检查服务器上的防火墙是否允许进入正在使用的端口的连接!

假设您可以从外部成功访问Apache服务器,您也可以尝试这样做:

  • 停止Apache服务器,以便该端口80是免费的.
  • 使用启动开发服务器 sudo python manage.py runserver 0.0.0.0:80

  • 允许每个人`ALLOWED_HOSTS = ['*']` 为我工作从我的 Android 手机访问 Mac 上的 Django 应用程序 (4认同)
  • 使用“python manage.py runserver 0.0.0.0:8000”仍然给出相同的结果。您能详细说明一下我如何配置 Apache 来处理此端口吗? (2认同)

Bon*_*ich 22

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

ALLOWED_HOSTS = ['*']
Run Code Online (Sandbox Code Playgroud)

然后运行服务器:

python manage.py runserver 0.0.0.0:9595
Run Code Online (Sandbox Code Playgroud)

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


Mat*_*ttH 14

选择一个或多个来自:

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

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

非root用户通常无法绑定到端口<1024.

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

如果有上游防火墙并且您对此不太了解,则需要与网络管理员联系.


Joi*_*ish 13

只需这样做:

python manage.py runserver 0:8000
Run Code Online (Sandbox Code Playgroud)

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

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

<your ip address>:8000
Run Code Online (Sandbox Code Playgroud)

例如:

192.168.1.130:8000
Run Code Online (Sandbox Code Playgroud)

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

ALLOWED_HOSTS = ['*']
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助...


dat*_*dan 7

对于 AWS 用户。

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

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

  • 须藤 apt-get 安装 python-pip
  • 须藤pip安装django

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

  • 通过 AWS 控制台配置

3)在ALLOWED_HOSTS中添加公网IP和DNS

  • 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 运行服务器 0:80

站点现在可在以下任一位置使用(不需要 :80,因为这是 http 的默认值):

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


adr*_*fan 5

打开终端
类型: ifconfig
检查 ifconfig 命令的结果
使用 inet IP .. 应该如下所示 .. 192.168.1.121 或类似的 192.168.xx

现在像平常一样运行服务器,但这次 也在 settings.py上指定inet IP
python3 manage.py runserver 192.168.xx:8000(用你的inet替换x) ALLOWED_HOSTS = ['*']