"제공된 호스트 이름이이 서버에 유효하지 않습니다"는 무엇을 의미합니까?


64

Drupal 8 웹 사이트를 실행 중이며 페이지를 탐색 할 때 다음과 같은 오류 메시지가있는 일반 흰색 페이지가 나타납니다.

제공된 호스트 이름이이 서버에 유효하지 않습니다.

이것은 무엇을 의미 하는가? 이 문제를 어떻게 해결합니까?


2
로컬 개발 환경을 구성 할 때이 문제가 발생하면 여기에 요약 된 솔루션을 참조하십시오.
Patrick Kenny

답변:


78

이 오류 메시지는 HTTP 호스트 헤더 공격으로부터 보호하기 위해 Drupal 8에 추가 된 기능 에서 발생합니다 . 이 기능은 패치에 대해 생성 된 변경 레코드 에도 설명되어 있습니다 .

기본적으로 HTTP Host 헤더 를 악의적 인 목적으로 스푸핑하고 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 호스트 헤더 공격 일 수도 있습니다.

이 설정이 구성되어 있고이 메시지가 표시되면 정규식 구문을 엉망으로 만들었을 수 있습니다. 이 경우 첫 번째 예를보고 설정에 복사 / 붙여 넣기를 한 다음 사이트가 실행되는 호스트 이름을 반영하도록 편집하십시오.


5
나는 패치의 저자 중 한 사람이며 패치에 대한 변경 기록의 원본 초안을 작성했습니다. 이 질문과 답변은 누구나 오류가 발생하는 경우 "높은 googlability"오류 메시지를 표시하는 것입니다. 이 설정을 더 잘 설명 할 수 있다고 생각되면 자유롭게 답을 추가하십시오. 이 CW를 만들 수도 있습니다.
mpdonadio

Drupal 서버에 직접 액세스 할 수 없지만 리버스 프록시 뒤에있는 경우 bazillion 구성이 있으며 이는 귀찮은 일입니다. 깨끗한 옵트 아웃 메커니즘이 있어야합니다.

지금은 설치 프로그램에서 자동으로 설정하려는 노력이 있었지만 지금은 다시 제거되었습니다. 신뢰할 수있는 호스트 이름을 설정하지 않으면 유효성 검사가 수행되지 않습니다. 또한, 나는 지금 막 mpdonadio와 MPD 사이를 연결했다 :)
Berdir

예, 커밋 된 패치에서 자동 구성이 제거되었습니다. 현재 "선택되어 있지만 설정되지 않은 경우 경고합니다". drupal.org/node/2404259 의 후속 조치 가 설치 프로그램에서 설정됩니다. @Berdir, 나는 얼마 전에 인터넷 정체성의 위기가 있고, 내가 여기 모드를되었을 때 나는 다른, 너무 ...하면 내 별명 : 내 자식의 이름을 변경하지 않았다
mpdonadio

'^ theming \ .dev $'를 사용할 때 다음 오류가 발생합니다. 오류 메시지 UnexpectedValueException : Symfony \ Component \ HttpFoundation \ Request-> getHost ()의 신뢰할 수없는 호스트 "localhost"(core / vendor / symfony / http의 1221 행) -foundation / Symfony / Component / HttpFoundation / Request.php).
Axel Briche

6

로컬 호스트 설치의 경우 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 호스트 헤더를 스푸핑하지 않도록 적절한 값을 설정해야하므로 권장하지 않습니다. 귀하의 웹 사이트가 귀하의 로컬 사이트에서만 실행되고 있다면 괜찮을 것입니다.

신뢰할 수있는 호스트 이름 구성의 새로운 설정을 참조하십시오 .


1
settings.local.php 파일의 올바른 사용을 정의하므로이 답변에 대해 더 많은 투표를해야합니다. 이 설정은 settings.php에 정의되어서는 안되며, 지역 환경에 다른 설정 파일을 사용하여 3 # 문자로 켜거나 끌 수있는 목적을 무시합니다. 로컬 설정에 대한 링크 또는 일부 정보는 더 많은 표를 얻을 수 있습니다.
dimmech

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.