Django 0.0.0.0:80; 无法远程访问。

31

我正在尝试从同一网络中的另一台计算机访问我的Django服务器。我已经设置好了我的服务器并可以使用python manage.py runserver命令查看所有内容,然后通过访问http://127.0.0.1:8000进行查看。但是,当我尝试使用python manage.py runserver 0.0.0.0:80命令时,我无法从其他计算机上查看我的Django页面。托管Django服务器的计算机具有内部网IP 192.168.1.146。在我的第二台计算机上,我启动浏览器并尝试访问http://192.168.1.146:80,但无法访问。我还尝试将端口80(我也尝试过8000)转发到该计算机,但仍然无法成功。求助!

9个回答

46

我在Windows电脑上也有同样的问题,然后我使用python manage.py runserver 192.168.1.146:80启动了Django服务器,而不是使用0.0.0.0。(当然我使用了不同的IP地址)。

之后,Windows防火墙弹出了一个对话框询问是否解除端口阻止(选择是)。此后,局域网中的其他电脑就可以使用192.168.1.146:80访问Django服务器。


11
为了使它对我起作用,我在终端(Mac OS X 10.8.2)中运行了sudo python manage.py runserver 0.0.0.0:80,然后在您的iPad(或iPhone)浏览器中,转到http://[your ip address]/。我不需要执行以下操作:Testing Django website on iphone

To find the IP address on a Mac


6
在Ubuntu上运行时,当我尝试执行以下操作时,它会显示“权限被拒绝”:
    python manage.py runserver 0.0.0.0:80

由于权限问题,以下内容可以像Ryan和gtujan所说的那样正常工作。
    sudo python manage.py runserver 0.0.0.0:80

注意:你正在80端口上运行服务器,该端口是HTTP端口。因此,在从Web浏览器输入URL时,您不一定需要在URL中输入“:80”。

    http://192.168.1.146:80/

以下内容应该足够了。即使您键入“:80”,它也被视为相同。
    http://192.168.1.146/

但是对于其他端口号,如8000等,必须在URL中包含:8000。


2
听起来像是防火墙问题。你确定已经在服务器上打开了80端口吗?

4
我的问题确实是这个。对于Linux用户,您需要使用命令 sudo ufw allow 8000/tcp 允许端口8000或您正在服务的任何端口。 - bhaskarc
@tao 谢谢。你应该把那个作为答案发布。 - MD. Khairul Basar

0
你在运行什么操作系统? 尝试给予命令root权限了吗?(假设你正在运行ubuntu / linux)
改为运行这个命令:
sudo python manage.py runserver 0.0.0.0:80

0
从你提到转发端口80的情况来看,你的第二台电脑似乎与运行Django的那台电脑不在同一个网络(路由器)上。在这种情况下,你应该浏览到Django网络的路由器的IP地址 - 192.168地址只能从该路由器后面看到,并且端口转发将确保你的请求发送到正确的计算机。

0
sudo ufw allow 8000/tcp

你可以尝试这个,它对我也有用。

0
我已经尝试过了。
python3 ./manage.py runserver_plus LAN.LAN.LAN.LAN:8010

但是可以在没有路径的情况下获得一个HTTP 200的回复。
http://LAN.LAN.LAN.LAN:8010/

如果远程客户端使用路径进行GET请求:
http://LAN.LAN.LAN.LAN:8010/login


VPN.CLIENT - - [30/Aug/2023 15:31:35] "GET /favicon.ico HTTP/1.1" 404 -
VPN.CLIENT - - [30/Aug/2023 15:31:45] "GET /login/ HTTP/1.1" 200 -
VPN.CLIENT - - [30/Aug/2023 15:31:48] "GET /login/ HTTP/1.1" 200 -

我可以看到请求已经到达服务器,但客户端却永远等待着从未到来的回复。
最疯狂的是,服务器和客户端彼此之间是可以通信的,即ssh正常工作。
Django版本为4.2.3。

[已解决] 告诉 OpenVPN 服务器使用 TCP 而不是 UDP


-6
据我所知,0.0.0.0是一个不可路由的IP地址。
如果您将套接字绑定到该地址,则仅在本地计算机上才能使用。

1
实际上,“0.0.0.0”表示所有可能的IP地址。它确实无法路由,但具有这种特殊含义。 - Eduard Luca
1
0.0.0.0 的意思是绑定到所有接口。所以本地它会绑定到 127.0.0.1,并且它将绑定到任何卡上的任何接口。如果您在 NAT 后面,并且 NAT 转发端口给它,那么这也是一个很好的选择,因为 Django 不会因为错误的 IP 地址而感到困惑。 - Shayne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接