컴퓨터 시스템(Linux)에는 호스트 이름이 하나만 있습니까?

컴퓨터 시스템(Linux)에는 호스트 이름이 하나만 있습니까?

hostname시스템의 DNS 이름을 표시하고 해당 호스트 이름 또는 NIS 도메인 이름을 표시하거나 설정하는 데 사용됩니다.

컴퓨터 시스템(Linux)에는 호스트 이름이 하나만 있습니까?

가상 호스트에서는 여러 호스트 이름이 웹 서버의 서로 다른 루트 디렉터리로 확인될 수 있습니다. 컴퓨터 시스템(Linux)이 호스트 이름을 하나만 가질 수 있다면 가상 호스팅은 어떻게 가능합니까?

감사해요.

답변1

예, 아니오. 이것은 호스트 이름이라고 불리는 두 가지 다른 것입니다.

"내부" 호스트 이름기본적으로 커널이 저장한 문자열입니다. 이는 hostname명령(또는 호출)에 의해 반환되는 값 이며 시스템에서 gethostname()고유합니다 (*) .

프로그램이 실행 중인 시스템에 대한 일부 식별자를 출력하려고 할 때 주로 사용됩니다. 예를 들어 \hBash 의 PS1호스트 이름으로 확장됩니다 . 마찬가지로 syslog 스타일 로그 파일에도 로그 항목의 호스트 이름이 포함되어 있습니다.

(*Stephen Kitt가 댓글을 달았지만,네임스페이스동일한 시스템의 프로세스에 대해 다른 호스트 이름을 표시하는 데 사용할 수 있습니다. 이는 주로 다른 시스템처럼 동작하려는 컨테이너에 사용됩니다. )

그리고 DNS 이름이 있습니다.이는 다른 시스템에서 다른 시스템의 IP 주소를 찾는 데 사용됩니다. 동일한 IP 주소, 즉 동일한 호스트를 가리키는 DNS 이름이 여러 개 있을 수 있습니다.

내부 호스트 이름과 DNS 이름은 동일할 필요가 없습니다. 누군가 웹 서버를 가지고 있고 orange(*)를 호출 하고 IP 주소를 사용하기 로 결정했다고 가정해 보겠습니다 192.0.2.9. 두 개의 서로 다른 도메인을 제공할 수 있으며 DNS는 www.example.orgwww.example.com를 모두 가리키도록 설정되는 192.0.2.9반면 시스템의 내부 호스트 이름 orange.example.org은 또는 가 될 수 있습니다 orange. 이 경우 DNS 설정에는 일반적으로역방향 조회192.0.2.9이름 으로 돌아가 orange.example.org지만 강제할 내용은 없습니다.

(*과일 이름을 따서 서버 이름을 짓는 것을 좋아하기 때문입니다. 누군가 webserver1비슷한 이름을 사용할 수도 있지만 요점은 실제 도메인 중 하나의 이름을 따서 명명할 필요가 없다는 것입니다.)

무엇보다도 웹 호스팅에서는 브라우저가 웹 서버에 액세스하려는 사이트의 이름을 알려 주어야 합니다. 그렇지 않으면 서버는 클라이언트가 어떤 가상 사이트에 액세스하려고 하는지 알 수 없습니다. HTTP에는Host머리글그런 이유로.


DNS 이름과 내부 호스트 이름의 차이점은 다음과 같습니다.멀티캐스트 DNS 프로토콜 (예를 들어아와시 데몬) 및 기타 검색 프로토콜. mDNS를 사용하면 호스트는 동일한 네트워크에 있는 다른 모든 호스트에 이름 정보를 쿼리하고 DNS에서 명시적으로 설정하지 않고도 해당 호스트 이름을 다른 호스트에 표시할 수 있습니다.

답변2

컴퓨터 시스템(Linux)에는 호스트 이름이 하나만 있습니까?

아니요.

/etc/hosts[호스트 주소를 가리키는 DNS 레코드를 통해 누구나 호스트에 원하는 이름을 지정할 수 있다는 점, 에서 여러 별칭을 가질 수 있다는 점 , 또는 호스트가 무엇인지에 대한 철학적 고려 사항을 완전히 무시하겠습니다.이름정말이에요]

Linux 시스템에서 호스트 이름은 기본적으로 하위 프로세스에 의해 상속되는 단순히 프로세스별 리소스("UTS 네임스페이스")이지만 unshare(2)이 플래그를 사용하여 해당 리소스에서 분리할 수 있습니다. 맨페이지를 확인해야 합니다.clone(2)CLONE_NEWUTSnamespaces(7)

PID, 포트 번호, 마운트 지점 등과 마찬가지로 호스트 이름은 더 이상 전역 식별자가 아니며 프로세스의 주소 공간(가상 메모리) 또는 파일 설명자 테이블처럼 가상화될 수 있습니다.

가상 호스트에서는 여러 호스트 이름이 웹 서버의 서로 다른 루트 디렉터리로 확인될 수 있습니다. 컴퓨터 시스템(Linux)이 호스트 이름을 하나만 가질 수 있다면 가상 호스팅은 어떻게 가능합니까?

가상 호스팅은 완전히 다른 것으로, 일반적 으로 와일드카드 DNS 레코드(예: *.foo.com=> )를 구성하여 13.13.13.13수행됩니다 . 여기서 웹 서버는 http 헤더[1]의 값을 기반으로 다양한 디렉터리/리소스를 실행 13.13.13.13하고 Host:제공합니다(이는 고도로 구성 가능함). 웹 서버는 다양한 리소스를 기반으로 서비스를 제공할 수 있습니다.어느http 헤더뿐만 아니라 Host:). 이 모든 것에서 웹 서버를 실행하는 시스템의 운영체제는 아무런 역할을 하지 않습니다.

[1] 또는 대략서버 이름 표시https의 경우 동일한 웹 서버가 서로 다른 가상 호스트에 대해 서로 다른 인증서를 사용할 수 있습니다.

답변3

일반적으로 /etc/hostname. 그리고 당신은 에 있습니다 /etc/hosts.

UTS 네임스페이스를 사용하면 단일 시스템이 서로 다른 프로세스에 서로 다른 호스트 이름과 도메인 이름을 표시할 수 있습니다. 자세한 내용은 다음을 참조하세요.리눅스 네임스페이스. 따라서 동일한 시스템에 대해 여러 개의 호스트 이름과 도메인 이름을 갖는 것이 절대적으로 가능합니다. 예를 들어, 동일한 호스트 내의 Docker 컨테이너는 호스트 시스템과 다른 호스트 이름을 갖습니다.

관련 정보