Question

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.

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?

Show comments

Submit an answer


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!

Sign In or Sign Up to Answer

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.

Accepted Answer

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.

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Become a contributor for community

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

DigitalOcean Documentation

Full documentation for every DigitalOcean product.

Resources for startups and SMBs

The Wave has everything you need to know about building a business, from raising funding to marketing your product.

Get our newsletter

Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.

New accounts only. By submitting your email you agree to our Privacy Policy

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.