【问题标题】:How to access the local Django webserver from outside world如何从外部访问本地 Django 网络服务器
【发布时间】:2011-01-16 16:08:36
【问题描述】:

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

我意识到 Django 网络服务器不是生产服务器,但对于我来说,能够从外部世界访问它很重要——即不是从服务器上的网络浏览器,而是从另一台计算机。

我试过了:

http://mywebserver:port_django_runs_on

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

http://myipaddress:port_django_runs_on 

这也不起作用。

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

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

【问题讨论】:

  • 为什么不用 Apache 和 mod_wsgi 配置 Django?为什么不正确地做到这一点?
  • @S.Lott 如果您在服务器上有许多不同的项目要在不同的时间运行,并且您不想在每次添加新项目时重新配置 Apache,该怎么办? ?

标签: python django


【解决方案1】:

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

例如

python manage.py runserver 0.0.0.0:8000

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

无论您使用 IP 还是主机名访问网络服务器都没有关系。我猜你还在你自己的局域网中。
如果您真的想从外部访问服务器,您还必须将路由器配置为转发端口,例如8000 到你的服务器。


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

假设你可以从外部成功访问你的Apache服务器,你也可以试试这个:

  • 停止 Apache 服务器,使端口 80 空闲。
  • sudo python manage.py runserver 0.0.0.0:80启动开发服务器

【讨论】:

  • 使用“python manage.py runserver 0.0.0.0:8000”仍然给出相同的结果。您能否详细说明如何配置 Apache 来处理此端口?
  • @user248237 :您运行开发服务器,这与 Apache Web 服务器完全无关。开发服务器是一个独立的 Web 服务器。
  • 使用80端口需要特殊权限,可以试试sudo python manage.py runserver 80
  • @S.Lott:哦,谢谢。我知道,它在我写的时候就在我的脑海里,但不知何故没有进入键盘;)
  • 允许所有人 ALLOWED_HOSTS = ['*'] 为我工作,从我的 Android 手机访问 Mac 上的 Django 应用
【解决方案2】:

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

ALLOWED_HOSTS = ['*']

然后运行服务器:

python manage.py runserver 0.0.0.0:9595

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

【讨论】:

    【解决方案3】:

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

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

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

    非root用户一般不能绑定到

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

    如果有上游防火墙,而您对此了解不多,则需要与网络管理员联系。

    【讨论】:

    • 你能解释一下you haven't configured it successfully吗?
    • @ChillarAnand: 只需检查django runserver 是否真的在听你想要的地方,例如使用lsof
    • @ChillarAnand 我完成了你指示的步骤。使用 lsof 我看到我的端口的 python 条目。但是我的链接,即 myip:8000 没有响应。我知道它已经晚了,但任何建议都会有所帮助。
    【解决方案4】:

    这样做:

    python manage.py runserver 0:8000
    

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

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

    <your ip address>:8000
    

    例如:

    192.168.1.130:8000
    

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

    ALLOWED_HOSTS = ['*']
    

    希望这会有所帮助...

    【讨论】:

      【解决方案5】:

      适用于 AWS 用户。

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

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

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

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

      • 通过 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) 使用 sudo 在端口 80 上启动开发服务器

      • sudo python manage.py runserver 0:80

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

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

      【讨论】:

        【解决方案6】:

        我要在这里添加这个:

        1. sudo python manage.py runserver 80

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

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

        这也应该在没有 sudo 的情况下工作:

        python manage.py runserver 0.0.0.0:8000
        

        【讨论】:

          【解决方案7】:

          2020 年更新 试试这个方法

          python manage.py runserver yourIp:8000
          
          ALLOWED_HOSTS = ["*"]
          

          【讨论】:

          • 使用0.0.0.0:8000而不是自己的ip
          • 是的,两者都是正确的方法,根据情况使用任何一种
          【解决方案8】:

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

          ALLOWED_HOST = ['*']
          

          运行你的服务器:

          python3 manage.py runserver 0.0.0.0:8000
          

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

          【讨论】:

            【解决方案9】:

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

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

            【讨论】:

              【解决方案10】:

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

              【讨论】:

                【解决方案11】:

                在终端安装 ngrok

                sudo apt-get install -y ngrok-client
                

                在那次运行之后:

                ngrok http 8000
                or 
                ngrok http example.com:9000 
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2013-10-20
                  • 2020-10-31
                  • 2022-08-04
                  • 2014-08-19
                  • 1970-01-01
                  • 2018-08-22
                  相关资源
                  最近更新 更多