Drupal 8のWebサイトを実行していて、任意のページを参照すると、次のエラーメッセージが表示された真っ白なページが表示されます。
指定されたホスト名はこのサーバーでは無効です。
これは何を意味するのでしょうか?どうすれば修正できますか?
このエラーメッセージは、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ホストヘッダー攻撃に対して脆弱である可能性もあります。
この設定を構成していて、このメッセージが表示されている場合は、正規表現の構文に問題がある可能性があります。この場合、最初の例を取り、設定にコピーして貼り付け、サイトを実行するホスト名を反映するように編集します。
localhostインストールの場合、settings.phpファイルで次のコードを使用できます
$settings['trusted_Host_patterns'] = array(
'^localhost$','^YOUR_IP_ADDRESS$'
);
これは、設定ファイルの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サイトがローカルでのみ実行されている場合は、問題ありません。
参照: 信頼できるホスト名構成の新しい設定 。
この問題は、
<VirtualHost *:443>
あなたが持っているべき時
<VirtualHost *:80>
非sslセットアップ(開発/テスト環境など)でセットアップし、ポート80でサイトにアクセスしてみます
これは、サーバーの信頼できるホスト構成によるものです。ドメイン名または'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$',
);
Apache2でvirtualhotsを作成する必要があります
DocumentRoot/Users/mac/www/ServerName localhost
<Directory "/Users/mac/www">
AllowOverride All