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.

Hi, there, I am having the same problem I believe. But I am very new here. Would you please elaborate on your solution, please? Thank you!

Try DigitalOcean for free

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

Sign up

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

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

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more
DigitalOcean Cloud Control Panel