주소와 포트 지정 (Binding) - Apache HTTP Server

Apache HTTP Server Version 2.0

Apache > HTTP Server > Documentation > Version 2.0

# 주소와 포트 지정 (Binding)

가능한 언어: en | ja | ko

아파치가 특정 주소와 포트에서 서비스하도록 설정하기.

### 참고

- 가상호스트
- DNS 문제

## 개요

관련된 모듈 | 관련된 지시어
--- | ---
`core` `mpm_common` | `<VirtualHost>` `Listen`

아파치를 시작하면 아파치는 컴퓨터의 어떤 포트와 주소에 연결하여, 들어오는 요청을 기다린다. 기본적으로 아파치는 컴퓨터의 모든 주소에서 기다린다. 그러나 아파치가 특정 포트나 선택한 주소만을 기다리게 해야할 경우가 있다. 또 이 문제는 아파치가 어떻게 다른 IP 주소, 호스트명, 포트에 반응할지를 결정하는 가상호스트 기능과도 관련되있다.

`Listen` 지시어는 서버가 특정 포트나 주소와 포트 조합에서만 요청을 받게 한다. `Listen` 지시어에 포트 번호만 지정하면, 서버는 모든 인터페이스에서 지정한 포트를 기다린다. 여러 Listen 지시어로 기다릴 여러 주소와 포트를 지정할 수도 있다. 서버는 열거한 주소와 포트로 요청이 들어오면 응답한다.

예를 들어, 서버가 80번과 8000번 포트 모두에서 연결을 받도록 하려면:

`Listen 80
Listen 8000`

서버가 지정한 두 인터페이스와 포트에서 연결을 기다리도록 하려면,

`Listen 192.170.2.1:80
Listen 192.170.2.5:8000`

IPv6 주소는 다음과 같이 대괄호로 묶어야 한다:

`Listen [fe80::a00:20ff:fea7:ccea]:80`

## IPv6에서 특별히 고려할 점

IPv6를 구현한 플래폼이 늘고 있고 APR이 이들 플래폼 대부분에서 IPv6를 지원하기때문에, 아파치는 IPv6 소켓을 할당하여 IPv6로 받은 요청을 처리할 수 있다.

아파치 관리자에게 복잡한 부분은 IPv6 소켓이 IPv4 연결과 IPv6 연결을 모두 처리할 수 있느냐는 점이다. 대부분의 플래폼에서는 IPv4-대응(mapped) IPv6 주소를 사용하여 IPv6 소켓에서 IPv4 연결을 받지만, FreeBSD와 NetBSD와 OpenBSD은 시스템전체 정책때문에 기본적으로 허용하지 않는다. 그러나 기본적으로 허용하지않는 시스템이라도 아파치를 위해 특별한 설정 파라미터로 변경할 수 있다.

아파치가 최소한의 소켓을 사용하여 IPv4 연결과 IPv6 연결을 모두 받도록하려면 IPv4-대응 IPv6 주소를 사용해야 한다. 그러기위해서 컴파일때 구성 옵션 `--enable-v4-mapped`를 사용하고, 다음과 같이 일반적인 Listen 지시어를 사용한다:

`Listen 80`

`--enable-v4-mapped`를 사용할때 아파치가 만드는 기본 설정파일의 Listen 지시어는 위와 같다. `--enable-v4-mapped`는 FreeBSD, NetBSD, OpenBSD를 제외한 모든 플래폼에서 기본값이고, 아마도 당신의 아파치도 마찬가지일 것이다.

플래폼과 APR의 지원여부와 관계없이 아파치가 IPv4 연결만을 받도록하려면, 다음 예제와 같이 모든 Listen 지시어에 IPv4 주소를 사용한다:

`Listen 0.0.0.0:80
Listen 192.170.2.1:80`

IPv4 연결과 IPv6 연결을 서로 다른 소켓으로 받으려면, 컴파일때 구성 옵션 `--disable-v4-mapped`를 사용하고 다음과 같이 Listen 지시어를 따로 사용한다:

`Listen [::]:80
Listen 0.0.0.0:80`

`--disable-v4-mapped`를 사용할때 아파치가 만드는 기본 설정파일의 Listen 지시어는 위와 같다. `--disable-v4-mapped`는 FreeBSD, NetBSD, OpenBSD에서 기본값이다.

## 가상호스트와 어떻게 연관되나

Listen은 가상호스트를 만들지 않는다. 이는 단지 주서버가 어떤 주소와 포트를 기다릴지만 알려준다. `<VirtualHost>` 지시어를 사용하지 않으면, 서버는 받은 모든 요청을 똑같이 처리한다. 그러나 `<VirtualHost>`로 여러 주소와 포트에 대해 다른 행동을 지정할 수 있다. 가상호스트를 만들려면 먼저 서버에게 사용할 주소와 포트를 알려줘야 한다. 그리고 특정 주소와 포트에 대한 가상호스트의 행동을 지정할 `<VirtualHost>` 섹션이 필요하다. 주서버가 기다리지않는 주소와 포트를 사용하는 `<VirtualHost>`는 접근할 수 없음을 주의하라.

가능한 언어: en | ja | ko