python - www 域和 ip 地址的 django allowed_hosts 错误

标签 python django

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/

相关文章:

python - Django Admin 仅按反向外键查找中的第一个对象按功能/过滤器过滤

python - 如何在Python中将代码块分组,类似于函数,但不需要定义参数?

python - Models.py 问题( key )

django - DRF : Allow all fields in GET request but restrict POST to just one field

python - 如何删除 numpy 数组中的维度?

python - 夹层场注入(inject)

django csrf token 错误(RequestContext 不起作用)

python - aiohttp 和基于证书的身份验证 (cba)

python - 如何从Python访问具有固定大小数组的C结构内部数据?

Python - 装饰器