Apache와 IIS 5 한집 살림하기

하나의 윈도우 서버에 아파치와 IIS를 동시에 돌려야 할 경우가 있다. 우리회사는 웹서버로 IIS를 사용하는데 요번에 블로그 서비스를 기획하면서 텍스트큐브를 도입하기로 결정을 했다. 하지만 아직까지 IIS에서 텍스트큐브를 돌리기가 여의치 않아서 결국 아파치를 선택할 수 밖에 없었다. 서버를 따로 구입해서 블로그 전용서버로 사용하는게 제일 좋은 방법이겠지만, 서버를 구입하지 않고 어떻게 하면 같이 돌릴 수 있을까 고민을 해봤다.

두가지 방법을 생각해 볼 수 있다. 가장 쉬운 방법으로 포트를 서로 다르게 갖고 가는 것이다. 예를 들면 IIS는 80포트, 아파치는 8080포트로 돌리는 거다. 가장 쉽기는 한데, URL에 8080이 들어가는 게 좀 찜찜하다. 물론 프레임을 사용해서 8080포트가 붙은 주소를 감출 수는 있다.

다른 방법은 여유의 IP가 하나 더 있는 경우이다. IP가 하나더 있다면 각각에 IP를 할당하면 될테니깐.

나름 후자가 더 바람직한 방법 같아서 하나의 윈도우 서버에 IP를 두개 부여하고, IIS와 아파치에 IP를 각각 따로 설정했다. 그런 다음 잘 되겠지 하고, 먼저 IIS를 재시작하고, 다음에 아파치를 시작했더니 웬걸 이미 IP 주소가 사용되고 있어서 시작할 수 없다는 오류가 떨어지는 거다. 음 … IIS가 왜 다른 주소를 잡고 있을까?

한참을 고민하다가 IIS는 socket pooling을 한다는 사실을 알아냈다. 즉 IIS는 기본적으로 서버에 있는 모든 IP 주소에 리슨을 한다는 거다. 이를 방지하는 방법은 간단했다.

cd \inetpub\Adminscripts
cscript adsutil.vbs set w3svc/disablesocketpooling true

위 명령을 실행하면
disablesocketpooling : (BOOLEAN) True
이라는 결과를 볼 수 있다.

이렇게 설정을 하고 IIS를 재시작하니 드디어 IIS와 아파치가 사이좋게 지내는 거다. 대량의 트래픽이 발생하는 사이트는 당연히 이렇게 사용을 할 수 없을 테지만, 간단한 개인 블로그 정도는 이렇게 써도 무방하지 않을까?

Windows 2003에서는 IIS 6가 제공되고 있다. IIS 6에서 socket pooling을 방지하는 방법은 IIS 5와 틀리다. IIS 6에서 socket pooling 방지하는 방법을 참고하면 된다.