While upgrading Libravatar to a more recent version of Django, I ran into a mysterious 400 error.
In debug mode, my site was working fine, but with DEBUG = False
, I would
only a page containing this error:
Bad Request (400)
with no extra details in the web server logs.
Turning on extra error logging
To see the full error message, I configured logging to a
file by
adding this to settings.py
:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': '/tmp/debug.log',
},
},
'loggers': {
'django': {
'handlers': ['file'],
'level': 'DEBUG',
'propagate': True,
},
},
}
Then I got the following error message:
Invalid HTTP_HOST header: 'www.example.com'. You may need to add u'www.example.com' to ALLOWED_HOSTS.
Temporary hack
Sure enough, putting this in settings.py
would make it work outside of debug mode:
ALLOWED_HOSTS = ['*']
which means that there's a mismatch between the HTTP_HOST from Apache and the one that Django expects.
Root cause
The underlying problem was that the
Libravatar config file was missing the square brackets
around the
ALLOWED_HOSTS
setting.
I had this:
ALLOWED_HOSTS = 'www.example.com'
instead of:
ALLOWED_HOSTS = ['www.example.com']