【问题标题】:Local Django website won't load in browser本地 Django 网站不会在浏览器中加载
【发布时间】:2013-05-27 17:55:31
【问题描述】:

我猜有一个非常简单的解决方案,但我搜索了每个论坛和设置指南,但无法弄清楚:

我在我的 local 服务器上构建了一个 Django/CentOS-6.3 环境(使用 VirtualBox 和 Vagrant)。当我使用 'python manage.py runserver [::]:8000' 在 vagrant 终端中启动我的服务器时,它启动时没有错误。

Validating models...

0 errors found
May 31, 2013 - 13:56:15
Django version 1.5.1, using settings 'mysitename.settings'
Development server is running at http://[::]:8000/
Quit the server with CONTROL-C.

但是,当我尝试在浏览器中导航到“http://127.0.0.1:8001”时(我在我的 Vagrantfile 中设置了从端口 8000 到端口 8001 的端口转发),浏览器只会挂起 5 分钟直到超时,然后它返回消息:

> The connection was reset 
> The connection to the server was reset while the page was loading. 
> ...

这与我在关闭本地服务器后从浏览器收到的消息完全相同。我的计算机显然将其识别为转发端口,因为我尝试的任何其他端口(例如 8000)都会立即返回一个错误,指出它无法与位于 127.0.0.1:8000 的服务器建立连接。

关于服务器文件,我过去用 Django/Ubuntu 做过很多类似的设置,从来没有遇到过任何问题,但是 Django/CentOS 一定有一些不同的东西导致了这种情况的发生(或者也许我在我的一个服务器文件中犯了一个错误)。我也遵循了在 CentOS 上设置 Django 和 PostgreSQL 的指南,但无济于事。我将在下面评论我创​​建/编辑的一些文件。

如果有人有解决方案,甚至有关于从哪里开始查找错误的建议,我将不胜感激。

【问题讨论】:

  • 这里是我检查/编辑的服务器文件,以及我已经完成的一些测试,希望有助于阐明当前问题的原因:-'django.wsgi'(在项目上面的目录)-'/etc/httpd/conf.d'(包含'wsgi.conf')-在python终端中测试'import django'-重新启动apache和vagrant-创建文件'/etc/httpd/conf.d /django.conf' 并添加行 WSGIScriptAlias - 将这 8 行添加到 '/etc/httpd/conf/httpd.conf': (docs.djangoproject.com/en/1.5/howto/deployment/wsgi/modwsgi/# basic-configuration) - 重启 Apache 和 MySQL
  • 当你python manage.py runserver [::]:8001 时会发生什么?
  • 这也不起作用 - 结果相同。
  • 我写这个是为了回答,因为出于某种原因我无法发表评论。我有完全相同的问题。在 127.0.0.1:8000 上加载页面时出现问题,但是对我来说,该应用程序在 0.0.0.0:8000 上运行。

标签: django centos localhost virtualbox vagrant


【解决方案1】:

主人的“127.0.0.1”和客人的“127.0.0.1”不一样。默认情况下该命令

python manage.py runserver

只听客人的本地主机。您应该能够在 vm 中对其进行测试(使用“vagrant ssh”登录)并运行

curl -I http://127.0.0.1:8000/

主机作为不同的 IP。要从主机访问开发服务器,您必须在没有 ip 限制的情况下启动它:

python manage.py runserver 0.0.0.0:8000

是的:

python manage.py runserver [::]:8000

应该是一样的。但那是 IPv6 语法 AFAIK。你确定“manage.py runserver”命令默认支持 IPv6 吗?我从来没有使用过 django 的 ipv6 地址,但是查看源代码 (https://github.com/django/django/blob/master/django/core/management/commands/runserver.py) 有一个标志,默认为 False ("--ipv6")。也许这就是“真正的”问题?

问候,

【讨论】:

    【解决方案2】:

    对于类似的问题,

    这个命令对我来说就像一个魅力

    python manage.py runserver [::]:8001
    

    【讨论】:

      【解决方案3】:

      检查您的 iptables,然后停止它。 Ubuntu 启动时通常不会打开 iptables。

      【讨论】:

        【解决方案4】:

        如果您的网络配置正确并且您的 django 应用程序使用

        python manage.py runserver 0.0.0.0:8000

        您仍然无法从 VM 主机访问您的 django 应用程序,几乎可以肯定存在防火墙问题。如果您正在运行 iptables,则上述解决方案很好。

        我在一台 Windows 7 主机的虚拟机虚拟机上部署了 CentOS 7。我不知道这个发行版使用firewalld,而不是iptables来控制访问。

        如果

        ps -ae | grep 防火墙

        返回类似的东西

        602 ? 00:00:00 防火墙d

        您的系统运行的是 firewalld,而不是 iptables。它们不会一起运行。

        要更正您的 VM,以便您可以从主机访问您的 django 站点,请使用以下命令:

        firewall-cmd --zone=public --add-port=8000/tcp --permanent

        firewall-cmd --reload

        非常感谢 pablo v 在“访问虚拟机上的 django 服务器”一文中指出这一点。

        【讨论】:

          猜你喜欢
          • 2017-06-02
          • 1970-01-01
          • 2016-11-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-02
          • 2015-07-10
          相关资源
          最近更新 更多