Tên máy chủ được cung cấp không hợp lệ cho máy chủ này có nghĩa là gì?


64

Tôi đang điều hành một trang web Drupal 8 và khi tôi duyệt đến bất kỳ trang nào, tôi nhận được một trang trắng đơn giản chỉ với thông báo lỗi sau trên đó.

Tên máy chủ được cung cấp không hợp lệ cho máy chủ này.

Điều đó có nghĩa là gì? Làm thế nào để tôi sửa lỗi này?


2
Nếu bạn gặp vấn đề này với việc cấu hình môi trường phát triển cục bộ, hãy xem giải pháp được nêu ở đây.
Patrick Kenny

Câu trả lời:


78

Thông báo lỗi này đến từ một tính năng đã được thêm vào Drupal 8 để bảo vệ chống lại các cuộc tấn công tiêu đề Máy chủ HTTP . Tính năng này cũng được mô tả trong bản ghi thay đổi được tạo cho bản vá.

Về cơ bản, có thể giả mạo tiêu đề Máy chủ HTTP cho các mục đích bất chính và lừa Drupal sử dụng một tên miền khác trong một số hệ thống con (đặc biệt là tạo liên kết). Nói cách khác, tiêu đề Máy chủ HTTP cần được xem là đầu vào của người dùng và không đáng tin cậy.

Để chống lại điều này, một cài đặt mới $settings['trusted_host_patterns'], đã được thêm vào Drupal 8 để định cấu hình danh sách tên máy chủ "đáng tin cậy" mà trang web có thể chạy từ đó. Cài đặt cần phải là một mảng các mẫu biểu thức chính quy, không có dấu phân cách, đại diện cho tên máy chủ bạn muốn cho phép chạy từ đó.

Ví dụ: nếu bạn đang chạy trang web của mình từ một tên máy chủ duy nhất "www.example.com", thì bạn nên thêm phần này vào cài đặt của mình (thường được tìm thấy tại ./sites/default/settings.php):

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

Lưu ý ^, \.$. Đây là cú pháp PCRE . Điều này chỉ có nghĩa là bạn muốn khớp chính xác "www.example.com", không có gì thêm ở đầu và cuối, và các dấu chấm phải được coi là dấu chấm và không phải là ký tự đại diện.

Nếu bạn đang chạy từ "example.com", thì chỉ cần sử dụng:

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

Nếu bạn cần chạy một trang web có nhiều tên miền và / hoặc tên miền phụ và không thực hiện chuyển hướng URL chuẩn, thì cài đặt của bạn sẽ trông giống như thế này:

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

Điều này cho phép trang web chạy khỏi tất cả các biến thể của example.com và example.org, với tất cả các tên miền phụ được bao gồm.

Khi bạn điều chỉnh $settings['trusted_host_patterns']giá trị phù hợp, bạn sẽ có thể duyệt lại trang web của mình.

Bạn cũng có thể kiểm tra trạng thái cài đặt máy chủ đáng tin cậy của mình từ trang báo cáo trạng thái, tại quản trị / báo cáo / trạng thái

Nếu bạn loại bỏ hoàn toàn cài đặt, cơ chế lưu trữ đáng tin cậy sẽ không được sử dụng và bạn sẽ thấy lỗi trên trang báo cáo trạng thái. Ngoài ra, trang web của bạn cũng có thể bị tấn công tiêu đề Máy chủ HTTP dễ bị tấn công.

Nếu bạn có cài đặt này được định cấu hình và đang thấy thông báo này, thì có lẽ điều đó có nghĩa là bạn đã nhầm lẫn cú pháp biểu thức chính quy. Trong trường hợp này, lấy ví dụ đầu tiên và sao chép / dán vào cài đặt của bạn, sau đó chỉnh sửa nó để phản ánh tên máy chủ mà trang web của bạn chạy từ đó.


5
Tôi là một trong những tác giả của bản vá, và cũng đã viết bản thảo gốc của Bản ghi thay đổi cho bản vá (đó là nơi có rất nhiều văn bản ở trên). Câu hỏi và câu trả lời này là đưa ra thông báo lỗi "tính khả thi cao" trong trường hợp bất kỳ ai gặp phải nó. Xin vui lòng thêm câu trả lời của riêng bạn nếu bạn nghĩ rằng bạn có thể giải thích cài đặt này tốt hơn. Chúng tôi cũng có thể kết thúc việc làm CW này.
mpdon Arena

Có một số cấu hình bazillion khi máy chủ Drupal không thể truy cập trực tiếp nhưng lại đứng sau một proxy ngược và đây chỉ là một sự phiền toái. Cần có một cơ chế từ chối sạch sẽ.

Tôi tin rằng bây giờ, đã có những nỗ lực để tự động thiết lập nó trong trình cài đặt, nhưng hiện tại nó đã bị xóa. Không có xác nhận xảy ra nếu bạn không đặt tên máy chủ đáng tin cậy. Ngoài ra, tôi chỉ mới thực hiện kết nối giữa mpdonadio và MPD :)
Berdir

Vâng, cấu hình tự động đã bị xóa khỏi bản vá đã được cam kết. Nó hiện đang "chọn tham gia, nhưng chúng tôi sẽ cảnh báo bạn nếu nó không được đặt". Có một phần tiếp theo, drupal.org/node/2404259 , để đặt nó trong trình cài đặt. @Berdir, tôi đã gặp khủng hoảng về nhận dạng internet cách đây một thời gian và khi tôi trở thành một mod ở đây, tôi không muốn thay đổi tên hiệu của mình :) Tên người dùng git của tôi nếu khác, quá ...
mpdonadio

Khi tôi sử dụng '^ theming \ .dev $', tôi gặp lỗi này: Thông báo lỗi UnazedValueException: Máy chủ không tin cậy "localhost" trong Symfony \ Component \ httpFoundation \ Request-> gethost () (dòng 1221 của lõi / nhà cung cấp / symfony / http -foundation / Symfony / Thành phần / HttpFoundation / Request.php).
Axel Briche

6

để cài đặt localhost, bạn có thể sử dụng đoạn mã sau trong tệp settings.php của mình

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

3

Điều này xảy ra vì trusted_host_patternsbiến trong tệp cài đặt của bạn. Nếu bạn đang làm việc trên môi trường cục bộ và bạn muốn ghi đè lên điều này, hãy xác định phần sau trong settings.local.phptệp của bạn :

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

Hoặc mô hình chung hơn :

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

Hoặc cụ thể hơn cho các môi trường địa phương :

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

Đó là giải pháp đơn giản nhất, nhưng không được khuyến nghị vì bạn nên đặt các giá trị phù hợp để tránh giả mạo tiêu đề Máy chủ HTTP cho các mục đích bất chính. Nếu trang web của bạn chỉ chạy trên địa phương của bạn, thì bạn sẽ ổn thôi.

Xem: Cài đặt mới cho cấu hình tên máy chủ đáng tin cậy .


1
Bạn nên có nhiều upvote hơn cho câu trả lời này bởi vì nó xác định việc sử dụng đúng tệp settings.local.php. Các cài đặt này có lẽ không nên được xác định trong settings.php, nó đánh bại mục đích có một tệp cài đặt khác cho môi trường cục bộ của bạn có thể bật / tắt với 3 # ký tự. Một liên kết hoặc một số thông tin về thiết lập cục bộ có thể kiếm được nhiều phiếu hơn.
dimmech

2

Vấn đề này cũng sẽ xảy ra nếu bạn có

<VirtualHost *:443>

khi nào bạn nên có

<VirtualHost *:80>

thiết lập trong một thiết lập không ssl (như đối với môi trường dev / tests) và thử truy cập trang web trên cổng 80


0

Điều này là do cấu hình máy chủ đáng tin cậy của người phục vụ. Nó có thể tạo ra khi bạn thay đổi tên miền hoặc 'trusted_host_patterns'. Để giải quyết vấn đề, hãy thêm tên miền mới của bạn vào DRUPAL_ROOT/sites/SITE_FOLDER/settings.php(Ví dụ sites/defaults/settings.php:)

Ví dụ: Tên miền = newdomain.com

$settings['trusted_host_patterns'] = array(
  '^newdomain.com\.loc$',
  '^www\.newdomain.com\.loc$',
);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.