gpt4 book ai didi

python - 将 Django 站点从 http 升级到 https 后,我不断收到 `Invalid HTTP_HOST header` 错误电子邮件

转载 作者:太空狗 更新时间:2023-10-29 21:38:37 25 4
gpt4 key购买 nike

最近,我将我的一个 Django 站点从 http 升级到 https。然而,在那之后,我不断收到 Invalid HTTP_HOST header 错误邮件,而之前我从未收到过此类邮件。

以下是一些日志消息:

[Django] ERROR (EXTERNAL IP): Invalid HTTP_HOST header: '123.56.221.107'. You may need to add '123.56.221.107' to ALLOWED_HOSTS.


[Django] ERROR (EXTERNAL IP): Invalid HTTP_HOST header: 'www.sgsrec.com'. You may need to add 'www.sgsrec.com' to ALLOWED_HOSTS.


[Django] ERROR (EXTERNAL IP): Invalid HTTP_HOST header: 'sgsrec.com'. You may need to add 'sgsrec.com' to ALLOWED_HOSTS.

Report at /apple-app-site-association Invalid HTTP_HOST header: ‘sgsrec.com’. You may need to add ‘sgsrec.com’ to ALLOWED_HOSTS.


Invalid HTTP_HOST header: ‘www.pythonzh.cn’. You may need to add ‘www.pythonzh.cn’ to ALLOWED_HOSTS.

Report at / Invalid HTTP_HOST header: ‘www.pythonzh.cn’. You may need to add ‘www.pythonzh.cn’ to ALLOWED_HOSTS.

Request Method: GET Request URL: http://www.pythonzh.cn/ Django Version: 1.10.6


[Django] ERROR (EXTERNAL IP): Invalid HTTP_HOST header: 'pythonzh.cn'. You may need to add 'pythonzh.cn' to ALLOWED_HOSTS.

奇怪的是,我只更改了我的博客网站www.zmrenwu.com nginx配置,但似乎所有托管在123.56.221.107上的网站都受到了影响。

当然,我正确设置了 ALLOWED_HOSTS:

ALLOWED_HOSTS = ['.zmrenwu.com']
ALLOWED_HOSTS = ['.sgsrec.com']
ALLOWED_HOSTS = ['.pythonzh.cn']

我的博客网站www.zmrenwu.com的Nginx配置:

server {
charset utf-8;
server_name zmrenwu.com www.zmrenwu.com;
listen 80;
return 301 https://www.zmrenwu.com$request_uri;
}

server {
charset utf-8;
server_name zmrenwu.com;
listen 443;

ssl on;
ssl_certificate /etc/ssl/1_www.zmrenwu.com_bundle.crt;
ssl_certificate_key /etc/ssl/2_www.zmrenwu.com.key;

return 301 https://www.zmrenwu.com$request_uri;
}

server {
charset utf-8;
listen 443;
server_name www.zmrenwu.com;

ssl on;
ssl_certificate /etc/ssl/1_www.zmrenwu.com_bundle.crt;
ssl_certificate_key /etc/ssl/2_www.zmrenwu.com.key;

location /static {
alias /home/yangxg/sites/zmrenwu.com/blogproject/static;
}

location /media {
alias /home/yangxg/sites/zmrenwu.com/blogproject/media;
}

location / {
proxy_set_header Host $host;
proxy_pass http://unix:/tmp/zmrenwu.com.socket;

为什么会这样?我该如何解决这个问题?

最佳答案

按照其他答案中的建议禁用 DisallowedHost 主机警告在我看来不是正确的解决方案。 Django 向您发出这些警告是有原因的 - 您最好在这些请求到达 Django 之前阻止它们。

您在 nginx 配置中创建了一个新的服务器 block 。因为它是您定义的唯一 HTTPS 服务器,所以它成为该端口的默认服务器。来自documentation :

The default_server parameter, if present, will cause the server to become the default server for the specified address:port pair. If none of the directives have the default_server parameter then the first server with the address:port pair will be the default server for this pair.

这解释了为什么您突然看到所有这些无效主机错误。任何现在尝试通过 HTTPS 连接到您的服务器的机器人最终都将使用此默认服务器。因为许多机器人将使用假主机名或仅使用您的服务器 IP(两者都不在 ALLOWED_HOSTS 中),这会导致 Django 中出现警告。

那么解决方案是什么?您可以创建一个单独的服务器 block 来处理所有此类无效请求:

server {
listen 443 ssl default_server;
server_name _;
return 444;
}

444 是nginx对disconnect invalid requests的特殊响应状态.

添加此 block 后,它将用于所有与您要响应的主机 header 不匹配的请求,并且任何尝试连接无效主机的内容都将无法连接。

同时,Django 将停止查看对无效主机的请求。

关于python - 将 Django 站点从 http 升级到 https 后,我不断收到 `Invalid HTTP_HOST header` 错误电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47846521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com