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

时间:2010-02-14 10:18:57

标签: python django

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

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

我试过了:

http://mywebserver:port_django_runs_on

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

http://myipaddress:port_django_runs_on 

也不起作用。

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

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

10 个答案:

答案 0 :(得分:269)

您必须运行开发服务器,使其listens on the interface到您的网络。

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

答案 1 :(得分:18)

我必须将此行添加到settings.py才能使其正常工作(否则从其他计算机访问时显示错误)

ALLOWED_HOSTS = ['*']

然后用:

运行服务器
python manage.py runserver 0.0.0.0:9595

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

答案 2 :(得分:13)

从以下选择一项或多项:

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

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

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

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

如果有上游防火墙并且您对此知之甚少,则需要与网络管理员联系。

答案 3 :(得分:4)

这样做:

#include <iostream>
using namespace std;

inline bool timer_timestamp_less_1(uint32_t t1,uint32_t t2){
    return (t1-t2)>(1U<<31);
}

inline bool timer_timestamp_less_2(uint32_t t1,uint32_t t2){
    return (t1 < t2);
}

int main(){
    // Equivalent
    cout << !timer_timestamp_less_1(1, 2) << endl; // 0
    cout << !timer_timestamp_less_2(1, 2) << endl; // 0
    // Not Equivalent
    cout << !timer_timestamp_less_1(-1, 2) << endl; // 0
    cout << !timer_timestamp_less_2(-1, 2) << endl; // 1
}

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

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

python manage.py runserver 0:8000

例如:

<your ip address>:8000

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

192.168.1.130:8000
希望这会有所帮助......

答案 4 :(得分:2)

对于AWS用户。

我不得不使用以下步骤来实现目标。

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

  • sudo apt-get install python-pip
  • sudo pip install django

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

  • 通过AWS控制台配置

3)将公共IP和DNS添加到ALLOWED_HOSTS

  • ALLOWED_HOSTS是一个列表对象,可以在settings.py
  • 中找到
  • ALLOWED_HOSTS = [&#34; 75.254.65.19&#34;,&#34; ec2-54-528-27-21.compute-1.amazonaws.com&#34;]

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

  • sudo python manage.py runserver 0:80

网站现在可以使用以下任意一种方式(不需要:80,因为它是http的默认值):

  • [公共DNS]即ec2-54-528-27-21.compute-1.amazonaws.com
  • [公共知识产权],即75.254.65.19

答案 5 :(得分:1)

我要在此处添加:

  1. sudo python manage.py runserver 80

  2. 转到您的手机或计算机,然后在浏览器中输入您的计算机内部IP(例如192.168.0.12)。

  3. 此时你应该连接到Django服务器。

    这也应该没有sudo:

    python manage.py runserver 0.0.0.0:8000
    

答案 6 :(得分:1)

更新2020 尝试这种方式

python manage.py runserver yourIp:8000

ALLOWED_HOSTS = ["*"]

答案 7 :(得分:0)

如果您使用的是Docker,则需要确保端口也已公开

答案 8 :(得分:0)

在终端中安装ngrok

sudo apt-get install -y ngrok-client

在运行之后:

ngrok http 8000
or 
ngrok http example.com:9000 

答案 9 :(得分:0)

您只需要允许任何主机: 设置.py:

ALLOWED_HOST = ['*']

运行你的服务器:

python3 manage.py runserver 0.0.0.0:8000

如果你想连接安卓应用,只需在 AndroidManifest 中添加互联网权限 这对我有用;)