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


64

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

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

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


2
ローカル開発環境の構成でこの問題が発生している場合は、ここで概説するソリューションを参照してください。
パトリックケニー

回答:


78

このエラーメッセージは、HTTPホストヘッダー攻撃から保護するためにDrupal 8に追加された機能から発生しています。この機能は、パッチ用に生成された変更レコードにも記載されています

基本的に、不正な目的でHTTP Hostヘッダーをスプーフィングし、Drupalをだましていくつかのサブシステム(特にリンク生成)で異なるドメイン名を使用させることができました。つまり、HTTP Hostヘッダーはユーザー入力と見なされる必要があり、信頼される必要はありません。

これに対処するために、新しい設定$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 Hostヘッダー攻撃に対して脆弱である可能性があります。

この設定を構成していて、このメッセージが表示されている場合、おそらく正規表現の構文が台無しになっていることを意味します。この場合、最初の例を取り上げ、設定にコピーして貼り付け、サイトの実行元のホスト名を反映するように編集します。


5
私はパッチの作成者の1人であり、パッチの変更記録のオリジナルドラフトも書きました(上記のテキストの多くはここから来ています)。この質問と回答は、誰かがそれを見つけた場合に備えて、エラーメッセージ「高googlability」を提供することです。この設定をより適切に説明できると思われる場合は、ご自身の回答を自由に追加してください。このCWを作成することもあります。
mpdonadio

Drupalサーバーに直接アクセスできないが、リバースプロキシの背後にある場合、膨大な構成があり、これは単に迷惑です。明確なオプトアウトメカニズムが必要です。

私はそれが今だと信じています、インストーラでそれを自動的に設定する努力がありましたが、それは今のところ再び削除されました。信頼できるホスト名を設定しない場合、検証は行われません。また、mpdonadioとMPDを接続したのは今だけです:)
ベルディール

はい、コミットされたパッチから自動構成が削除されました。現在は「オプトインですが、設定されていない場合は警告が表示されます」。インストーラーで設定するためのフォローアップdrupal.org/node/2404259があります。@Berdir、私はしばらく前にインターネットのアイデンティティの危機を持っていた、と私はここにMODになったとき、私は別の、あまりにも...あれば私のニックネーム:)私のGitのユーザー名を変更したくなかった
mpdonadio

'^ theming \ .dev $'を使用すると、次のエラーが発生します:エラーメッセージUnexpectedValueException:Untrusted Host "localhost" in Symfony \ Component \ HttpFoundation \ Request-> getHost()(行1221のcore / vendor / symfony / http -foundation / Symfony / Component / HttpFoundation / Request.php)。
アクセルブリッシュ

6

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

$settings['trusted_host_patterns'] = array(
   '^localhost$','^YOUR_IP_ADDRESS$'
 );

3

これ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 Hostヘッダーをスプーフィングしないように適切な値を設定する必要があるため、お勧めしません。Webサイトがローカルでのみ実行されている場合は、問題ありません。

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


1
この回答では、settings.local.phpファイルの適切な使用が定義されているため、より多くの賛成票が必要です。これらの設定は、おそらくsettings.phpで定義されるべきではありません。3つの#文字でオン/オフできるローカル環境用の異なる設定ファイルを持つという目的に反します。ローカル設定に関するリンクまたは何らかの情報は、より多くの票を獲得する場合があります。
ディメック

2

この問題は、次の場合にも発生します。

<VirtualHost *:443>

いつすべきか

<VirtualHost *:80>

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


0

これは、サーバーの信頼できるホスト構成によるものです。ドメイン名またはを変更すると生成されます'trusted_host_patterns'。problemeを解決するには、に新しいドメインを追加します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$',
);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.