Report this

What is the reason for this report?

After adding my domain to ALLOWED_HOSTS in django settings I am still getting a 502 error. Not sure why my settings are not recognized.

Posted on October 12, 2017

So, I created an Ubuntu droplet with nginx, gunicorn and django. I added my domain and when trying to access my django site I got a 502 error. I read in several places that adding my domain to ALLOWED_HOSTS should remedy the problem so I did that and still got the error. To make a long story that should have been shorter shorter I finally started gunicorn in the console and the stacktrace I am getting indicates that my domain probably needs to be added to ALLOWED_HOSTS but I already added it. After digging a little further I notice that there are three files that contain an ALLOWED_HOSTS variable. There is ./var/lib/digitalocean/settings.py, ./var/lib/digitalocean/allow_hosts.py and /home/django/django_project/django_project/settings.py. So far I have attempted adding my domain into each of thes files and still recieve the same error. This is a stupid, really really frustrating error. Anyone have any suggestions or have the same issue?



This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.

I figured out what the problem was. I didn’t realize that at the bottom of my settings.py file ALLOWED_HOSTS was being overwritten when the IP addresses are looked up at runtime. Sooo, ALLOWED_HOSTS appears near the beginning of the file which contains the list of your supplied ip addresses and/or domain names and another one at the very end of the file which is set as follows:

Find out what the IP addresses are at run time

This is necessary because otherwise Gunicorn will reject the connections

def ip_addresses(): ip_list = [] for interface in netifaces.interfaces(): addrs = netifaces.ifaddresses(interface) for x in (netifaces.AF_INET, netifaces.AF_INET6): if x in addrs: ip_list.append(addrs[x][0][‘addr’]) return ip_list

Discover our IP address

ALLOWED_HOSTS = ip_addresses()

I had to change ALLOWED_HOSTS = ip_addresses() to ALLOWED_HOSTS += ip_addresses() so that my entries near the beginning of the file weren’t overwritten.

So, django has a settings.py file that it uses for application-wide configuration. In the settings file generated for my app I was setting the ALLOWED_HOSTS variable but then at the end of the file it was being overwritten. The following line at the end of the settings file:

ALLOWED_HOSTS += ip_addresses()

“appends” the output from the ip_addresses call to what I set ALLOWED_HOSTS to previously in the file.

Doesn’t work for me for some reason.

The developer cloud

Scale up as you grow — whether you're running one virtual machine or ten thousand.

Get started for free

Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

*This promotional offer applies to new accounts only.