web-dev-qa-db-ja.com

「提供されたホスト名はこのサーバーでは無効です」とはどういう意味ですか?

Drupal 8のWebサイトを実行していて、任意のページを参照すると、次のエラーメッセージが表示された真っ白なページが表示されます。

指定されたホスト名はこのサーバーでは無効です。

これは何を意味するのでしょうか?どうすれば修正できますか?

69
mpdonadio

このエラーメッセージは、Drupal 8 to protect to HTTP Host header attack) に追加された feature から送信されています。この機能についても説明していますパッチ用に生成された 変更レコード 内。

本質的に、悪意のある目的で HTTPホストヘッダー を偽装し、Drupalをトリックして、いくつかのサブシステム(特にリンク生成)で異なるドメイン名を使用するように仕向けることができました。つまり、HTTPホストヘッダーはユーザー入力と見なされ、信頼されている必要はありません。

これに対処するために、新しい設定$settings['trusted_Host_patterns']がDrupal 8に追加され、サイトが実行できる「信頼できる」ホスト名のリストを構成します。設定は、区切り文字なしの正規表現パターンの配列であり、実行を許可するホスト名。

たとえば、単一のホスト名「www.example.com」からサイトを実行している場合は、これを設定に追加する必要があります(通常、./sites/default/settings.php):

$settings['trusted_Host_patterns'] = array(
  '^www\.example\.com$',
);

^\.$。これらは PCRE構文 です。これらは、「www.example.com」と正確に一致させ、先頭と末尾に何も追加しないこと、およびドットをワイルドカード文字ではなくドットとして扱う必要があることを意味します。

「example.com」から実行している場合は、次のように使用します。

$settings['trusted_Host_patterns'] = array(
  '^example\.com$',
);

複数のドメインまたはサブドメイン、あるいはその両方のサイトを実行する必要があり、正規のURLリダイレクトを行わない場合、設定は次のようになります。

$settings['trusted_Host_patterns'] = array(
  '^example\.com$',
  '^.+\.example\.com$',
  '^example\.org',
  '^.+\.example\.org',
);

これにより、サイトはすべてのサブドメインを含めて、example.comおよびexample.orgのすべてのバリアントから実行できます。

調整したら$settings['trusted_Host_patterns']を適切な値に設定すると、サイトを再び閲覧できるようになります。

信頼できるホスト設定のステータスは、admin/reports/statusにあるステータスレポートページからも確認できます。

設定を完全に削除すると、トラステッドホストメカニズムは使用されず、ステータスレポートページにエラーが表示されます。また、サイトはHTTPホストヘッダー攻撃に対して脆弱である可能性もあります。

この設定を構成していて、このメッセージが表示されている場合は、正規表現の構文に問題がある可能性があります。この場合、最初の例を取り、設定にコピーして貼り付け、サイトを実行するホスト名を反映するように編集します。

88
mpdonadio

localhostインストールの場合、settings.phpファイルで次のコードを使用できます

$settings['trusted_Host_patterns'] = array(
   '^localhost$','^YOUR_IP_ADDRESS$'
 );
7
Mohan Gathala

これは、設定ファイルのtrusted_Host_patterns変数が原因で発生します。ローカル環境で作業していて、これをオーバーライドする場合は、settings.local.phpファイルで次のセクションを定義します。

/*
 * Drupal Trusted Host Patterns
 */
$settings['trusted_Host_patterns'] = [];

以上 一般的なパターン

$settings['trusted_Host_patterns'] = [ '.*' ];

以上 ローカル環境に固有

$settings['trusted_Host_patterns'] = array(
  '^172\.20.\0.\3$',
  '^localhost$',
);

これは最も単純なソリューションですが、悪意のある目的でHTTPホストヘッダーを偽装しないように適切な値を設定する必要があるため、お勧めしません。 Webサイトがローカルでのみ実行されている場合は、問題ありません。

参照: 信頼できるホスト名構成の新しい設定

5
kenorb

この問題は、

<VirtualHost *:443>

あなたが持っているべき時

<VirtualHost *:80>

非sslセットアップ(開発/テスト環境など)でセットアップし、ポート80でサイトにアクセスしてみます

3
Neil Davis

これは、サーバーの信頼できるホスト構成によるものです。ドメイン名または'trusted_Host_patterns'を変更すると生成されます。この問題を解決するには、新しいドメインをDRUPAL_ROOT/sites/SITE_FOLDER/settings.phpに追加します(例:sites/defaults/settings.php

例:ドメイン名= newdomain.com

$settings['trusted_Host_patterns'] = array(
  '^newdomain.com\.loc$',
  '^www\.newdomain.com\.loc$',
);
0
Jimmy

Apache2でvirtualhotsを作成する必要があります

DocumentRoot/Users/mac/www/ServerName localhost

<Directory "/Users/mac/www">
  AllowOverride All