【发布时间】:2016-01-10 21:51:18
【问题描述】:
我使用 Nginx、Gunicorn、Django 堆栈创建了一个 Django (1.7) Web 应用程序,最近我开始遇到一些错误:
[Django] 错误(外部 IP):无效的 HTTP_HOST 标头:'*.domain.com'。根据 RFC 1034/1035,提供的域名无效。
四处搜索后,我发现了一些建议将通配符作为允许的主机的响应,即
ALLOWED_HOSTS = ['*']
但是我仍然收到此错误。
这是完整的错误信息:
Request repr():
<WSGIRequest
path:/,
GET:<QueryDict: {}>,
POST:<QueryDict: {}>,
COOKIES:{},
META:{'HTTP_ACCEPT_ENCODING': 'none',
'HTTP_CONNECTION': 'close',
'HTTP_HOST': '*.domain.com',
'HTTP_USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2)',
'HTTP_X_FORWARDED_FOR': '11.111.111.11',
'HTTP_X_FORWARDED_HOST': 'subdomain.domain.com',
'HTTP_X_REAL_IP': '11.111.111.11',
'PATH_INFO': u'/',
'QUERY_STRING': '',
'RAW_URI': '/',
'REMOTE_ADDR': '127.0.0.1',
'REMOTE_PORT': '51349',
'REQUEST_METHOD': 'GET',
'SCRIPT_NAME': u'',
'SERVER_NAME': '127.0.0.1',
'SERVER_PORT': '9000',
'SERVER_PROTOCOL': 'HTTP/1.0',
'SERVER_SOFTWARE': 'gunicorn/19.1.1',
'gunicorn.socket': <socket._socketobject object at 0x3877fa0>,
'wsgi.errors': <gunicorn.http.wsgi.WSGIErrorsWraper object at 0x37e6050>,
'wsgi.file_wrapper': <class 'gunicorn.http.wsgi.FileWrapper'>,
'wsgi.input': <gunicorn.http.body.Body object at 0x396cc50>,
'wsgi.multiprocess': False,
'wsgi.multithread': False,
'wsgi.run_once': False,
'wsgi.url_scheme': 'http',
'wsgi.version': (1, 0)}>
这是我应该关心的事情吗?我在这里错过了什么吗?我认为通过将通配符放在允许的主机中,我会消除这个问题,但似乎并非如此。
任何帮助将不胜感激。
【问题讨论】:
-
我不会使用通配符允许的主机,而是使用真正允许的主机列表,例如 [www.domain.com, domain.com]。还要配置你的 Nginx 以通过 server_name 接受这些请求。
-
@Jingo 感谢您的帮助和快速响应。我之前添加了域,但遇到了同样的错误,这就是我在其位置添加通配符的原因。奇怪的。我会按照你提到的那样把它放回去,看看我是否仍然遇到这些问题。
-
我现在删除了通配符允许的主机,但仍然收到此错误?!
-
你解决了这个问题吗?怎么样?
-
不,不幸的是我没能修复,但我相信这可能是由我们服务器上运行的内部进程引起的,因为它似乎每天都在同一时间发生:s
标签: django nginx dns wildcard http-host