Local Django website won't load in browser

2019-06-02 07:46发布

问题:

I'm guessing there's a very simple solution to this, but I searched every forum and setup guide and can't figure it out:

I built a Django/CentOS-6.3 environment on my local server (using VirtualBox and Vagrant). When I startup my server in the vagrant terminal with 'python manage.py runserver [::]:8000' it starts up with no errors.

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.

However, when I try to navigate to 'http://127.0.0.1:8001' in my browser (I set up port forwarding from port 8000 to port 8001 in my Vagrantfile), the browser just hangs for 5 minutes until it times out, then it returns the message:

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

This is the exact same message I get from the browser even after I shut down my local server. My computer obviously recognizes this as a forwarded port, because any other port I try (such as 8000) instantly returns an error saying that it can't establish a connection to the server at 127.0.0.1:8000.

With regard to the server files, I have done many similar setups with Django/Ubuntu in the past and have never had any issues, but there must be something different about Django/CentOS that is causing this to happen (or maybe I made a mistake someone in one of my server files). I have followed guides for setting up Django & PostgreSQL on CentOS, too, but to no avail. I'll comment some of the files I have created/edited below.

If anyone has a solution, or even has advice on where to start looking for errors, I would very much appreciate it.

回答1:

If your network is configured correctly and your django application with

python manage.py runserver 0.0.0.0:8000

and you still can't access your django app from the VM host there is almost certainly a firewall issue. The solution above is good if you are running iptables.

I deployed CentOS 7 on a virtualbox VM from a Windows 7 host. I didn't know that this distribution uses firewalld, not iptables to control access.

if

ps -ae | grep firewall

returns something like

602 ? 00:00:00 firewalld

your system is running firewalld, not iptables. They do not run together.

To correct you VM so you can access your django site from the host use the commands:

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

firewall-cmd --reload

Many thanks to pablo v for pointing this out in the post "Access django server on virtual Machine".



回答2:

the host's "127.0.0.1" is not the same as the guest's "127.0.0.1". Per default the command

python manage.py runserver

listens only to the guest's localhost. You should be able to test it from within the vm (use "vagrant ssh" to login) and run

curl -I http://127.0.0.1:8000/

The host as a different IP. To access the development server from the host you have to start it without ip restriction:

python manage.py runserver 0.0.0.0:8000

Yes:

python manage.py runserver [::]:8000

should be the same. But that's IPv6 syntax AFAIK. Are you sure that the "manage.py runserver" command supports IPv6 by default? I've never used ipv6 addresses w/ django, but looking at the source (https://github.com/django/django/blob/master/django/core/management/commands/runserver.py) there seams to be a flag that the default to False ("--ipv6"). Perhaps that's the "real" problem?

Regards,



回答3:

For a similar problem,

This command worked like a charm for me

python manage.py runserver [::]:8001


回答4:

Check your iptables, and stop it. Ubuntu commonly does not open the iptables when it starts.