Django 1.6
我已经让我的网络服务器将 www 请求重定向到非 www 等价物。即 www.domain.com 转到 domain.com
我已经设置了 django 以通过电子邮件向我发送任何错误
我收到一堆错误,如下所示:
[Django] ERROR: Invalid HTTP_HOST header: 'www.domain.com'.You may need to add u'www.domain.com' to ALLOWED_HOSTS
或
[Django] ERROR: Invalid HTTP_HOST header: '< ip address >'.You may need to add u'< ip address >' to ALLOWED_HOSTS
但电子邮件的内容很简单:
No stack trace available
Request repr() unavailable.
我知道重定向有效,因为如果我尝试访问 www.domain.com,我会被重定向到 domain.com
我想更好地检查请求对象以了解请求是如何到达 django 的。应该转发到 django 的唯一请求应该是去 domain.com 的请求。
有谁知道我会怎么做?
如果有人知道这里发生了什么,那就更好了。
这里要求的是 nginx conf:
server {
listen <ip address>:80;
server_name "";
return 444;
}
server{
listen <ip address>:80;
server_name www.domain.com;
return 301 $scheme://domain.com$request_uri;
}
#HTTPS server
server{
listen <ip address>:80;
listen <ip address>:443 ssl;
server_name domain.com;
location / {
uwsgi_pass unix:<path to socket file>;
include /etc/nginx/uwsgi_params;
}
if ($ssl_protocol = ""){
return 301 https://$host$request_uri;
}
}
最佳答案
ALLOWED_HOSTS
django 中的设置检查 HTTP 请求中的 Host
header ,该 header 由浏览器在发送请求时生成。
在您的 Nginx 配置中,您(大概)使用的是 URL 重写而不是 HTTP 重定向。
如果是这种情况,那么重定向基本上是服务器内部的。浏览器发送的请求中的原始 Hosts
header 仍将具有其原始值。
Nginx 的正确配置应该是这样的:
server {
listen 80;
server_name www.domain.com;
return 301 http://domain.com$request_uri;
}
server {
listen 80;
server_name domain.com;
...django server config...
}
这将导致 HTTP 301 重定向返回到您的浏览器,并且浏览器将发送一个带有正确的 Host
header 的新请求。
关于python - www 域和 ip 地址的 django allowed_hosts 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24538973/