Nginx에서 $ host와 $ http_host의 차이점은 무엇입니까?


답변:


217

$host핵심 모듈 의 변수입니다 .

$ 호스트

이 변수는 Host 헤더를 사용할 수없는 경우 요청 헤더 또는 요청을 처리하는 서버 이름의 Host 행과 같습니다.

이 경우이 변수는 $ http_host와 다른 값을 가질 수 있습니다. 1) 호스트 입력 헤더가 없거나 비어있는 값이있는 경우 $ host는 server_name 지시문의 값과 같습니다. 2) Host 값에 포트 번호가 포함되어 있으면 $ host는 해당 포트 번호를 포함하지 않습니다. $ host의 값은 0.8.17부터 항상 소문자입니다.

$http_host또한 동일한 모듈의 변수이지만 일반적으로 $http_HEADER( ref ) 로 정의되어 있기 때문에 해당 이름으로 찾을 수 없습니다 .

$ http_HEADER

HTTP 요청 헤더 HEADER의 값은 소문자로 변환되고 '대시'가 '밑줄'로 변환 된 경우 (예 : $ http_user_agent, $ http_referer ...;


요약 :

  • $http_host항상 HTTP_HOST요청 헤더 와 같습니다 .
  • $host동일 $http_host, 소문자와 포트 번호가없는 (있는 경우) 경우를 제외하고는 HTTP_HOST존재하지 않거나 비어있는 값이다 . 이 경우 요청을 처리 한 서버 $hostserver_name지시문 값과 같습니다 .

57
$ host는 특히 현재 서버 블록에 정의 된 첫 번째server_name 입니다. 여러 개가 있으면 server_name첫 번째 것만 나타납니다.
Jonathan Vanasco

4
진실. 실제로 다음을 정의하는 것이 일반적입니다. server_name example.com www.example.com;
glarrain

여러 server_name지시문도 가질 수 있습니다 . 첫 번째 정규 표현식을 사용하면 정규 표현식 $host이되고 다시 작성 규칙 중에 모든 종류의 추한 일이 발생할 수 있습니다.
Jonathan Vanasco

5
않는 $server_name변수는 동일 server_name지시어의 값 또는 다중이 있다면 선택한 실제 서버 이름 server_name지시는?
CMCDragonkai

1
@CMCDragonkai $server_name는 항상 server_name 지시문으로 지정된 첫 번째 값과 같습니다. 예를 들어,로는 server_name example.com one.example.com two.example.com;, $server_name항상, "example.com"이됩니다 에 관계없이 사용자가 지정한하는 호스트의 . 실제로가 없으면 default_server호스트는 example.org와 같이 완전히 다른 것일 수 있습니다.
ATLief
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.