如何从外界访问本地 Django 网络服务器
- 2025-03-04 08:27:00
- admin 原创
- 67
问题描述:
我按照此处的说明使用内置 Web 服务器运行 Django,并能够使用成功运行它python manage.py runserver
。如果我从 Web 服务器本地访问 127.0.0.1:port,我会得到 Django 页面,表明它已成功运行。
我意识到 Django 网络服务器不是生产服务器,但对于我来说,出于测试目的,能够从外部世界访问它非常重要 - 例如,不是从服务器上的网络浏览器,而是从另一台计算机。
我试过:
http://mywebserver:port_django_runs_on
但它不起作用。我还尝试使用 IP(基于 ifconfig)来访问:
http://myipaddress:port_django_runs_on
但也不起作用。
Web 服务器正在运行,因此必须可以从外部访问,但我不知道如何访问。我正在使用 Apache 运行 Linux,但我尚未使用 Apache 配置 Django。
关于如何做到这一点有什么想法吗?
解决方案 1:
您必须运行开发服务器,以便它监听您的网络接口。
例如
python manage.py runserver 0.0.0.0:8000
监听端口 8000 上的每个接口。
使用 IP 还是主机名访问 Web 服务器并不重要。我猜你仍然在自己的 LAN 中。
如果你真的想从外部访问服务器,你还必须配置路由器以将端口转发8000
到你的服务器。
检查服务器上的防火墙是否允许到正在使用的端口的传入连接!
假设您可以从外部成功访问您的 Apache 服务器,您也可以尝试以下操作:
停止 Apache 服务器,以便
80
释放该端口。使用以下命令启动开发服务器
sudo python manage.py runserver 0.0.0.0:80
解决方案 2:
我必须将此行添加到 settings.py 才能使其工作(否则从另一台计算机访问时会显示错误)
ALLOWED_HOSTS = ['*']
然后使用以下命令运行服务器:
python manage.py runserver 0.0.0.0:9595
还要确保防火墙允许连接到该端口
解决方案 3:
只需这样做:
python manage.py runserver 0:8000
通过上述命令,您实际上将其绑定到外部 IP 地址。所以现在当您使用端口号访问您的 IP 地址时,您将能够在浏览器中访问它而不会出现任何问题。
只需在浏览器地址栏中输入以下内容:
<your ip address>:8000
例如:
192.168.1.130:8000
您可能需要编辑 settings.py 在最后一行的 settings.py 中添加以下内容:
ALLOWED_HOSTS = ['*']
希望这会有所帮助...
解决方案 4:
选择以下一个或多个:
您的应用程序未成功监听预期的 IP:PORT
+ 因为你还没有配置成功
+ 因为用户没有权限
您的应用程序正在成功侦听目标 IP:PORT,但客户端无法访问它,因为
+ 服务器本地 iptables 阻止了它。
+ 防火墙可以阻止它。
lsof -i
因此,您可以通过在机器上以 root 身份运行来检查您的应用程序是否正在成功监听,并查找python
具有您指定的相应端口的条目。
非 root 用户通常无法绑定到 <1024 的端口。
您需要查看iptables -nvL
是否存在一条规则可以阻止访问您尝试将应用程序绑定到的 ip:port。
如果存在上游防火墙而您对此不太了解,则需要与网络管理员联系。
解决方案 5:
对于 AWS 用户。
我必须采取以下步骤才能到达那里。
1)确保pip和django在sudo级别安装
sudo apt-get 安装 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 启动开发服务器
须藤蟒蛇管理.py runserver 0:80
现在可以通过以下任一方式访问站点(不需要 :80,因为这是 http 的默认设置):
[公共 DNS] 即 ec2-54-528-27-21.compute-1.amazonaws.com
[公网IP] 即75.254.65.19
解决方案 6:
打开终端
类型:ifconfig
检查 ifconfig 命令的结果
使用 inet IP .. 应该看起来像这样.. 192.168.1.121 或类似的 192.168.xx
现在像平常一样运行服务器,但这次指定 inet IP
python3 manage.py runserver 192.168.xx:8000(将 x 替换为您的 inet)
也在
settings.py
ALLOWED_HOSTS = ['*']上
解决方案 7:
我要在这里添加这个:
sudo python manage.py runserver 80
转到您的手机或计算机并
192.168.0.12
在浏览器中输入您的计算机的内部 IP(例如)。
此时您应该已连接到 Django 服务器。
在没有 sudo 的情况下这也应该有效:
python manage.py runserver 0.0.0.0:8000
解决方案 8:
2020 年更新 试试这个方法
python manage.py runserver yourIp:8000
ALLOWED_HOSTS = ["*"]
解决方案 9:
您只需要允许任何主机:settings.py:
ALLOWED_HOST = ['*']
运行你的服务器:
python3 manage.py runserver 0.0.0.0:8000
如果您想连接 Android 应用程序,只需在 AndroidManifest 中添加互联网权限即可。这对我来说很有用;)
解决方案 10:
如果你使用 Docker,则需要确保端口也暴露出来
解决方案 11:
在终端中安装 ngrok
sudo apt-get install -y ngrok-client
运行之后:
ngrok http 8000
or
ngrok http example.com:9000
扫码咨询,免费领取项目管理大礼包!