Apa artinya "Nama host yang disediakan tidak valid untuk server ini"?

65

Saya menjalankan situs web Drupal 8, dan ketika saya menjelajah ke halaman mana pun, saya mendapatkan halaman putih polos hanya dengan pesan kesalahan berikut di atasnya.

Nama host yang disediakan tidak valid untuk server ini.

Apa artinya ini? Bagaimana cara saya memperbaikinya?

mpdonadio
sumber
2
Jika Anda mengalami masalah ini dengan mengonfigurasi lingkungan pengembangan lokal, lihat solusi yang diuraikan di sini.
Patrick Kenny

Jawaban:

79

Pesan kesalahan ini berasal dari fitur yang ditambahkan ke Drupal 8 untuk melindungi terhadap serangan header HTTP Host . Fitur ini juga dijelaskan dalam catatan perubahan yang dibuat untuk tambalan.

Pada dasarnya, itu mungkin untuk menipu header HTTP Host untuk tujuan jahat, dan menipu Drupal agar menggunakan nama domain yang berbeda di beberapa subsistem (terutama pembuatan tautan). Dengan kata lain, tajuk Host HTTP harus dianggap sebagai input pengguna, dan tidak dapat dipercaya.

Untuk mengatasi hal ini, pengaturan baru,, $settings['trusted_host_patterns']ditambahkan ke Drupal 8 untuk mengonfigurasi daftar nama host "tepercaya" tempat situs itu dapat dijalankan. Pengaturan perlu berupa array pola ekspresi reguler, tanpa pembatas, yang mewakili nama host yang ingin Anda jalankan.

Misalnya, jika Anda menjalankan situs Anda dari satu hostname "www.example.com", maka Anda harus menambahkan ini ke pengaturan Anda (biasanya ditemukan di ./sites/default/settings.php):

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

Perhatikan ^, \., dan $. Ini adalah Sintaks PCRE . Ini hanya berarti bahwa Anda ingin mencocokkan "www.example.com" dengan tepat, tanpa tambahan di awal dan akhir, dan bahwa titik-titik tersebut harus diperlakukan sebagai titik dan bukan karakter wildcard.

Jika Anda menjalankan dari "example.com", gunakan saja:

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

Jika Anda perlu menjalankan situs beberapa domain dan / atau subdomain, dan tidak melakukan pengalihan URL kanonik, maka pengaturan Anda akan terlihat seperti ini:

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

Ini memungkinkan situs untuk menjalankan semua varian dari example.com dan example.org, dengan semua subdomain disertakan.

Setelah Anda menyesuaikan $settings['trusted_host_patterns']dengan nilai yang tepat, Anda harus dapat menjelajah ke situs Anda lagi.

Anda juga dapat memeriksa status pengaturan host tepercaya Anda dari halaman laporan status, yaitu di admin / laporan / status

Jika Anda menghapus pengaturan sama sekali, mekanisme host tepercaya tidak akan digunakan, dan Anda akan melihat kesalahan pada halaman laporan status. Selain itu, situs Anda mungkin juga rentan terhadap serangan header HTTP Host.

Jika Anda telah mengonfigurasi pengaturan ini dan melihat pesan ini, mungkin itu berarti Anda telah mengacaukan sintaks ekspresi reguler. Dalam hal ini, ambil contoh pertama, dan salin / tempel ke pengaturan Anda, lalu edit untuk mencerminkan nama host tempat situs Anda berasal.

mpdonadio
sumber
5
Saya adalah salah satu penulis tambalan, dan juga menulis konsep asli dari Catatan Perubahan untuk tambalan (yang merupakan asal banyak teks di atas). Pertanyaan dan jawaban ini adalah untuk memberikan pesan kesalahan "googlability tinggi" kalau-kalau ada yang menemukannya. Silakan tambahkan jawaban Anda sendiri jika Anda pikir Anda dapat menjelaskan pengaturan ini dengan lebih baik. Kami mungkin akhirnya membuat CW ini.
mpdonadio
Ada bazillion konfigurasi ketika server Drupal tidak dapat diakses secara langsung tetapi berada di belakang proxy terbalik dan ini hanya gangguan. Seharusnya ada mekanisme opt-out yang bersih.
Saya percaya sekarang, ada upaya untuk secara otomatis mengaturnya di installer, tetapi itu dihapus lagi untuk saat ini. Tidak ada validasi yang terjadi jika Anda tidak menetapkannya sebagai nama host tepercaya. Juga, saya baru saja membuat koneksi antara mpdonadio dan MPD :)
Berdir
Ya, konfigurasi otomatis telah dihapus dari tambalan yang dilakukan. Saat ini "opt-in, tetapi kami akan memperingatkan Anda jika tidak disetel". Ada tindak lanjut, drupal.org/node/2404259 , untuk mengaturnya di installer. @Berdir, saya mengalami krisis identitas internet beberapa waktu lalu, dan ketika saya menjadi mod di sini saya tidak ingin mengubah nama panggilan saya :) Nama pengguna git saya jika berbeda, juga ...
mpdonadio
Ketika saya menggunakan '^ theming \ .dev $', saya memiliki kesalahan ini: Pesan kesalahan UnexpectedValueException: Host tidak tepercaya "localhost" di Symfony \ Component \ HttpFoundation \ Request-> getHost () (baris 1221 dari core / vendor / symfony / http -foundation / Symfony / Component / HttpFoundation / Request.php).
Axel Briche
6

untuk instalasi localhost Anda dapat menggunakan kode berikut dalam file settings.php Anda

$settings['trusted_host_patterns'] = array(
   '^localhost$','^YOUR_IP_ADDRESS$'
 );
Mohan Gathala
sumber
3

Ini terjadi karena trusted_host_patternsvariabel dalam file pengaturan Anda. Jika Anda bekerja di lingkungan lokal dan Anda ingin menimpanya, tentukan bagian berikut di settings.local.phpfile Anda :

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

Atau lebih banyak pola umum :

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

Atau lebih spesifik untuk lingkungan lokal :

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

Ini solusi paling sederhana, tetapi tidak disarankan karena Anda harus menetapkan nilai yang tepat untuk menghindari spoofing header HTTP Host untuk tujuan jahat. Jika situs web Anda hanya berjalan di lokal Anda, maka Anda akan baik-baik saja

Lihat: Pengaturan baru untuk konfigurasi nama host tepercaya .

kenorb
sumber
1
Anda harus memiliki lebih banyak upvotes untuk jawaban ini karena ini menentukan penggunaan yang tepat dari file settings.local.php. Pengaturan ini mungkin tidak boleh didefinisikan dalam settings.php, itu mengalahkan tujuan memiliki file pengaturan yang berbeda untuk lingkungan lokal Anda yang dapat dihidupkan / dimatikan dengan 3 # karakter. Tautan atau beberapa info pada pengaturan lokal dapat memperoleh lebih banyak suara.
dimmech
2

Masalah ini juga akan terjadi jika Anda memilikinya

<VirtualHost *:443>

padahal seharusnya

<VirtualHost *:80>

mengatur dalam pengaturan non-ssl (seperti untuk lingkungan dev / pengujian) dan mencoba mengakses situs pada port 80

pengguna356540
sumber
0

Ini karena konfigurasi host tepercaya dari serveur. Itu dapat menghasilkan ketika Anda mengubah nama domain atau 'trusted_host_patterns'. Untuk mengatasi probleme, tambahkan domain baru Anda ke DRUPAL_ROOT/sites/SITE_FOLDER/settings.php(Ex: sites/defaults/settings.php)

Contoh: Nama domain = newdomain.com

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