설치 경로
Apache는 Apache License 2.0 라이선스로 소스코드가 공개되어 있기 때문에 직접 컴파일해도 되지만 본 문서에서는 바이너리를 다운로드하여 설치하도록 한다.
Windows 플랫폼 Apache 웹 서버는 여러 벤더에서 배포하고 있는데 이는 Linux 운영체제의 배포판들이 여럿 존재하는 것과 비슷하다. 다음은 잘 알려진 배포 벤더 목록이다.
본 문서에서는 Apache Lounge 벤더에서 배포하는 Apache를 설치할 것이다. Apache Lounge에서 제공하는 Apache 바이너리가 Python 웹 앱 연동 모듈인 mod_wsgi와 잘 호환된다고 알려져 있다.
다운로드 및 설치
Apache Lounge의 Apache 바이너리 다운로드 페이지에 접속하면 주의사항들이 게시되어 있다. 지원이 끝난 Windows 버전에서는 절대 실행하지 말 것, 최신 Visual C++ 재배포 패키지를 설치할 것. 2020년 3월 기준으로 현재 Apache Lounge에서 제공하고 있는 최신 안정 버전은 2.4.46이며 VS16(Visual Studio 2019) 버전을 기반으로 컴파일 되었다.
해당 페이지에 링크되어 있는 재배포 패키지(Visual C++ Redistributable for Visual Studio 2015-2019)를 설치했다면, Apache 바이너리(httpd-2.4.46-win64-VS16.zip)를 다운로드한다. 본 문서에서는 64비트 시스템을 대상으로 하여, win64 버전을 다운로드 했다. 2.4 버전부터는 인스톨러를 사용하는 대신 압축파일로 제공하고 있다.
Windows가 설치된 파티션의 루트 디렉터리(일반적으로 C:\)에 압축을 푼다(관리자 권한 필요). 대부분의 문서나 모듈 또한 이 위치를 표준으로 삼고 있기에 아래 스크린샷과 같이 C:\Apache24\에 Apache 내부 폴더 및 파일들이 위치하면 된다. 이 문서에서는 C:\Apache24 디렉터리를 기준으로 설명한다.
기초적인 설치가 끝났다. 리눅스 계열 소프트웨어들은 대개 텍스트 파일을 통해 설정들을 저장하고 불러오므로 Windows 레지스트리를 설정할 사항은 없다.
서버 시동/종료 같은 기본적인 작업을 하기 위해서는 Apache 설치 디렉터리의 bin 폴더에 있는 httpd.exe 파일을 명령줄 옵션과 함께 실행해야 한다. `httpd -v`를 실행하면 간단한 버전 정보가 출력되며, `httpd -V`를 실행하면 자세한 버전 정보가 출력된다.
`httpd -?`를 실행하면 전체 명령줄 옵션이 출력된다.
환경변수 등록
서버를 재가동할 때 마다 명령 프롬프트를 이렇게 실행하는 것은 번거로우므로 path 환경변수에 bin 디렉터리를 등록하는 것도 좋은 방법이다. 그러면 어느 위치에서 httpd를 실행하더라도 bin 폴더 안에 있는 모든 파일들을 검색한다. httpd 시동/종료는 관리자 권한을 요구하므로 현재 계정이 관리자 계정이라면 시스템 변수가 아닌 사용자 변수 path에 추가하는 것도 좋다. 본 과정은 각자 상황에 따라 유동적으로 판단하기 바란다.
서비스 설치
Apache를 Windows의 서비스로 등록한다. Windows의 서비스 개념은 리눅스 운영체제의 데몬 프로세스와 유사하다. 서비스로 등록하면 Windows 부팅 시 자동으로 시작되게 할 수 있다.
관리자 권한으로 실행된 명령 프롬프트에서 다음 명령을 실행한다.
httpd -k install
Windows 방화벽이 켜져있는 경우 아래와 같이 네트워크 연결 허용 여부를 묻는 경고창이 나타나는데 localhost에서만 사용하려면 취소해도 되지만 외부에서 접속하게 하려면 액세스 허용을 해야 한다. 본 문서에서는 외부에서도 접속을 하는 경우를 기준으로 서술한다.
만약 Apache 웹 서버를 삭제하려면 서비스를 제거하고 폴더를 삭제하면 된다.
httpd -k uninstall
이제 Apache 서버를 실행해보자.
httpd -k start
오류없이 실행되면 웹 브라우저를 실행시켜 localhost(127.0.0.1)로 접속해본다. 'It works!'가 출력이 되면 Apache가 정상적으로 설치되어 실행되고 있는 것이다.
서비스 권한
기본적으로 Apache 서비스는 시스템 사용자 계정(Local System) 권한으로 실행된다. Windows 보안 구조상 Local System 계정은 파일 시스템, Named pipes, DCOM, secure RPC 등 어떤 방법을 사용하든지 네트워크에 액세스할 수 없다. 하지만 Local System을 Apache 웹 서버에 할당하기에는 Apache가 너무 많은 권한을 가진다. 이는 Apache가 실제 웹 서비스를 제공하는데에 문제는 없지만 보안상 위험한 설정이다. 그러므로 별도의 계정을 만들어 Apache를 실행시키는 것을 권장한다.
일단 Apache 서버를 종료한다.
httpd -k stop
새 계정을 생성해야 한다. 명령 프롬프트(cmd.exe) 또는 실행(Windows+R) 또는 작업 관리자에서 관리자 권한으로 lusrmgr.msc를 실행시킨다. 사용자를 새로 생성하되 본 문서에서는 아래와 같이 설정했다.
암호는 Password Generator 등을 사용하여 최대한 복잡하게 지정하라. 한 번 지정해두면 다시 지정할 경우가 거의 없다. 단, 잊어버렸을 경우 암호 재설정을 하면 된다.
생성된 계정의 소속 그룹이 Users인 것을 확인한다.
이제 secpol.msc를 실행시키고 로컬 정책 -> 사용자 권한 할당에서 새 Apache 계정을 등록해야 한다.
- 서비스로 로그온 정책에 Apache 계정을 등록한다.
- 로컬 로그온 거부 정책에 Apache 계정을 등록한다.
- 운영 체제의 일부로 작동 정책에 Apache 계정을 등록한다.
services.msc를 실행시켜 Apache 서비스 실행을 위해 로그온할 사용자 계정을 방금 만든 계정으로 지정한다. 그러면 '다음 사용자로 로그온' 컬럼의 값이 기존 Local System에서 .\Apache로 변경될 것이다.
이제 다시 Apache 서비스를 시동시켜보자. 명령 프롬프트 및 로그에 오류가 나타나지 않는지, 웹 브라우저에서는 정상적으로 출력되는지 다시 점검한다.
로그
Apache는 오류 로그를 Apache 설치 디렉터리의 logs\error.log 파일에 기록하고, Windows 이벤트 뷰어에도 기록한다. 실행 도중 오류가 출력되거나 반응이 없으면 로그를 참조하도록 한다.
마치며
Apache 웹 서버 설치를 모두 마쳤다. 이제 서버 환경설정을 구성할 차례이다.