2017-12-16 7 views
1

最近私のdjangoサイトの1つをhttpからhttpsにアップグレードします。しかし、その後、私は連続してエラーメールを受信しますが、そのようなタイプのメールを受信したことはありません。djangoサイトをhttpからhttpsにアップグレードした後に `Invalid HTTP_HOST header`エラーメールを受信しました

[ジャンゴ] ERROR(外部IP):

は、ここではいくつかのログメッセージである無効HTTP_HOSTヘッダ: '123.56.221.107'。 ALLOWED_HOSTSに「123.56.221.107」を追加する必要があります。


[ジャンゴ] ERROR(外部IP):無効HTTP_HOSTヘッダ: 'www.sgsrec.com'。 ALLOWED_HOSTSに「www.sgsrec.com」を追加する必要があるかもしれません。


[ジャンゴ] ERROR(外部IP):無効HTTP_HOSTヘッダ: 'sgsrec.com'。 ALLOWED_HOSTSに「sgsrec.com」を追加する必要があるかもしれません。

/apple-app-site-associationにあるレポートHTTP_HOSTヘッダーが無効です: 'sgsrec.com'。 ALLOWED_HOSTSに「sgsrec.com」を追加する必要があるかもしれません。


無効なHTTP_HOSTヘッダー: 'www.pythonzh.cn'。 ALLOWED_HOSTSに 'www.pythonzh.cn'を追加する必要があるかもしれません。

レポートは/ HTTP_HOSTヘッダーが無効です: 'www.pythonzh.cn' ALLOWED_HOSTSに 'www.pythonzh.cn'を追加する必要があるかもしれません。

要求メソッド:http://www.pythonzh.cn/ジャンゴバージョン:1.10.6


[ジャンゴ] ERROR(外部IP):リクエストURLを取得無効HTTP_HOSTヘッダ: 'pythonzh.cn'。 ALLOWED_HOSTSに 'pythonzh.cn'を追加する必要があるかもしれません。奇妙なことは、私は唯一の私のブログサイトwww.zmrenwu.com nginxの設定を変更することですが、123.56.221.107でホストされている私のサイトのすべてが影響しているようだ何

。原因

、私は正しくALLOWED_HOSTSを設定します。私のブログサイトwww.zmrenwu.com

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

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; 

をそれが起こったのはなぜ?そして、どのようにしてこの問題を解決することができますか?

答えて

3

を参照してください取得を停止するには、私の意見では正解ではありません。 Djangoがあなたにそのような警告を出させる理由はあります.Djangoに達する前にそれらの要求をブロックする方がよいでしょう。

nginx設定で新しいサーバーブロックを作成しました。これは定義した唯一のHTTPSサーバーなので、そのポートのデフォルトサーバーになります。 documentationから:

default_serverパラメータ、存在する場合、サーバは指定されたaddress:portペアのデフォルトのサーバーになってしまいます。いずれの指令にもdefault_serverパラメータがない場合、address:portペアの最初のサーバがこのペアのデフォルトサーバになります。

これは、これらの無効なホストエラーがすべて突然表示される理由を説明しています。 HTTPS経由でサーバーに接続しようとするボットは、このデフォルトサーバーを使用して終了します。多くのボットは偽のホスト名を使用するか、またはあなたのサーバIPだけを使用することになり(どちらもALLOWED_HOSTSにありません)、これはDjangoの警告を引き起こします。

解決策は何ですか?あなたは、すべての無効なリクエストを処理する別のサーバーのブロックを作成することができます

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

444disconnect invalid requestsにnginxので使用される特殊な応答ステータスです。

このブロックを追加すると、応答するホストヘッダーと一致しないすべての要求に使用され、無効なホストに接続しようとするものは接続できなくなります。

Djangoは無効なホストのリクエストを見なくなります。

1

これはおそらく、異なるHTTP_HOSTヘッダーでサーバーをターゲットにしているボットスクリプトが実行されている可能性があります(これは一般的です)。 djangoでは、特定のホストに設定されているAllowed Hostsを持っています。したがって、許可されたホストで指定されたホストヘッダーと異なるホストヘッダーがある場合、djangoは400エラーを返します。 デフォルトでは、djangoロガーは各エラーでメールを送信するように設定されています。あなたは 'django.security.DisallowedHost': { 'handlers': ['null'], 'propagate': False, },

をジャンゴにロガーを設定し、 次ロガーを追加する必要があるメールが他の回答で提案されているようDisallowedHostホストの警告を無効にhttps://www.calazan.com/how-to-disable-the-invalid-http_host-header-emails-in-django/

+0

ありがとうございます!しかし、なぜhttpsにアップグレードする前に、私はそのようなエラー電子メールを暴露していなかったのですか?それはちょうど偶然のこと? – yangxg

関連する問題