ShellRox
ShellRox

Reputation: 2602

Django is not available from forwarded port

I'm trying to connect to my website from another node on another network. If the nodes are in the same network, i can connect to the website without a problem.

I've forwarded port for ssh and Django (8000), I also have apache ready on port 9080.

ssh and apache ports work fine when connecting to them from external ip address, Django does not for some reason.

First, i tried to run the server on port 8000:

python manage.py runserver 0.0.0.0:8000

This works completely fine when connecting from the node that is in the same network as the server, but for some reason, whenever i try to access it from external ip address, the connection is refused.

To make sure it was Django, I also tried running the server on the same port as Apache (9080), although, i didn't expect "errorless" response, since i knew that port was occupied. But there was no change at all, I was still getting the same Apache page that i would get before.

I also tried allowing port 8000 on firewall:

sudo ufw allow 8000/tcp

But pretty sure this is not the problem, since this Debian came without any firewall.

I also tried to empty ALLOWED_HOSTS in settings, but there was no progression.


It seems like Django has no effect for external connections, what could be the reason?

I also struggle to understand the purpose of other http web server platforms in this case (e.g Apache, Nginx), Isn't Django creating a webserver itself along with its custom wsgi?

Firewall is not the problem, neither is the web server, then may the problem be caused by the Django itself? Maybe it is outer firewall?

Upvotes: 0

Views: 953

Answers (1)

alfonso.kim
alfonso.kim

Reputation: 2900

It is not clear how you are configuring Apache to forward requests to Django, it seems like you are treating those as two independent components. If you want to use a web server in front of Django (recommended for production envs), you need to configure both Apache and Django.

Then, as you are running django in dev mode (python manage.py runserver 0.0.0.0:8000), you should reach Django in http://server_ip:8000 regardless of Apache, perhaps there is another firewall blocking the connection. Use tracert / traceroute to find out where the connection is blocked.

FInally, for production environments, it is recommended to use a web server in front of Django to increase security and performance. See the docs for further information.

My guess is that you have another firewall blocking the port. You opened the local firewall using ufw, but there may be an outer firewall.

  1. python manage.py runserver 0.0.0.0:8000 starts correctly? If so, keep an eye in the log.
  2. Inside the server, do a request wget http://localhost:8000. The request should be logged
  3. If you can reach Apache in port 9080 from outside the server, you can:
    • Use nmap to find the opened / closed / filtered ports in the server to find if there is another firewall inbetween.
    • Configure Apache to forward requests to Django, although this does not solve the problem

In your question you say that you have forwarded port for ssh and Django. What exactly is this? Are you sure that you have not misconfigured your ssh server to listen in port 8000?

Upvotes: 1

Related Questions