Windows에서 아파치 사용법

Category:
Author: zemna
Date: April 17, 2021
Share this:

참조 : http://httpd.apache.org/docs/2.2/platform/windows.html

**

Windows용 아파치 다운로드**

아파치 웹서버 http://httpd.apache.org/download.cgi에서 아파치 최신 버전에 대한 정보를 얻을 수 있다. 여기에는 최신 발표판과 알파 혹은 베타 테스트버전과, 아파치 웹서버를 다운로드할 수 있는 HTTP 미러와 FTP 미러 목록이 있다. 빠르고 안정하게 다운받으려면 가까운 미러를 사용하길 바란다.

Windows에 설치하려면 확장자가 .msi인 Windows용 아파치 버전을 다운받아야 한다. 이 파일은 막바로 실행할 수 있는 아파치를 저장한 Microsoft 설치파일이다. 따로 소스코드만 묶어둔 .zip 파일이 있다. Microsoft Visual C++ (Visual Studio)을 사용하여 직접 아파치를 컴파일할 수도 있다.

Windows용 아파치 설치하기

설치하려면 Microsoft Installer 1.2 이상 버전이 필요하다. Windows 9x를 사용한다면 여기에서 Microsoft Installer를 2.0 버전으로 업그레이드할 수 있고, Windows NT 4.0과 2000을 사용한다면 여기에서 2.0 버전 업데이트를 구할 수 있다. Windows XP는 업데이트할 필요가 없다.

바이너리 설치파일로는 같은 컴퓨터에 서로 다른 아파치 2.0 버전을 설치할 수 없음을 주의하라. 그러나 1.3 버전 2.0 버전은 같은 컴퓨터에 아무 문제없이 설치할 수 있다. 같은 컴퓨터에 두가지 다른 2.0 버전을 설치하려면 소스를 컴파일하여 아파치를 설치해야 한다.

위에서 다운받은 아파치 .msi 파일을 실행한다. 설치할때 다음과 같은 것을 물어본다:

  1. 네트워크 도메인 (Network Domain). 등록된 서버의 DNS 도메인을 입력한다. 예를 들어, 서버의 전체 DNS 이름이 server.mydomain.net이라면 여기에 mydomain.net을 입력한다.

  2. 서버명 (Server Name). 서버의 전체 DNS 이름. 위의 경우 여기에 server.mydomain.net을 입력한다.

  3. 관리자 전자우편 주소 (Administrator's Email Address). 여기에 서버 관리자나 웹마스터의 전자우편 주소를 입력한다. 기본적으로 클라이언트에게 보내는 오류문에 이 주소를 기록한다.

  4. 사용자 대상 (For whom to install Apache) 새로 설치하는 아파치가 80번 포트에서 요청을 기다리게 하려면 for All Users, on Port 80, as a Service - Recommended (모든 사용자, 80번 포트, service로 - 추천)를 선택한다. 아파치를 service로 실행한다 (즉, 아파치는 서버에 로그인한 사람이 없어도 실행된다). 개인적으로 테스트해보거나 이미 80번 포트를 사용하는 다른 웹서버가 있다면 only for the Current User, on Port 8080, when started Manually (현재 사용자만, 8080번 포트, 직접 시작)를 선택한다.

  5. 설치 종류 (The installation type). 모듈 개발에 필요한 소스코드와 라이브러리를 제외한 모든 것을 설치하려면 Typical을 선택한다. Custom을 선택하면 설치할 내용을 지정할 수 있다. 전체 설치시 디스크에 빈 공간이 약 13 메가바이트 정도 필요하다. 이 수치는 웹사이트 크기를 제외한 것이다.

  6. 설치 장소 (Where to install). 기본 경로는 C:Program FilesApache Group이고, 이곳에 Apache2라는 디렉토리를 만든다.

설치할 동안 아파치는 conf 하위디렉토리에 있는 파일들을 선택한 설치 디렉토리에 맞게 구성한다. 그러나 이 디렉토리에 설정파일이 이미 있다면 그대로 둔다. 대신, 해당 파일의 새로운 복사본에 확장자 .default를 붙인다. 예를 들어, confhttpd.conf가 이미 있다면 confhttpd.conf.default로 이름을 변경한다. 설치후 .default 파일의 설정을 직접 살펴보고, 필요하다면 기존 설정파일을 수정해야 한다.

또, 이미 htdocsindex.html이라는 파일이 있다면 그대로 둔다 (index.html.default라고 복사하지도 않는다). 즉, 기존에 아파치가 설치되있더라도 안전하게 아파치를 새로 설치할 수 있다. 물론 설치하기 전에 서버를 중단하고, 설치후 새로운 서버를 시작해야 한다.

아파치 설치후 필요하다면 conf 하위디렉토리에 있는 설정파일을 수정해야 한다. 파일은 아파치를 설치한 디렉토리의 htdocs 하위디렉토리에 있는 문서를 서비스하도록 설정되있다. 실제로 아파치를 사용하기 전에 설정해야 할 옵션이 많다. 그러나 빨리 실행해볼 수 있도록 기본 설정파일로도 동작한다.

Windows용 아파치 설정하기

아파치는 conf 하위디렉토리에 있는 파일로 설정한다. 이 파일은 유닉스용과 같지만, Windows용 아파치 특유의 지시어가 몇개 있다. 사용가능한 모든 지시어를 보려면 지시어 목록을 참고하라.

Windows용 아파치의 주된 차이점은:

  • Windows용 아파치는 다중쓰레드 방식을 사용하기때문에, 유닉스와 달리 요청마다 다른 프로세스를 사용하지 않는다. 대신 아파치 프로세스는 항상, 부모 프로세스와 요청을 처리하는 자식 프로세스, 2개이다. 자식 프로세스에 있는 여러 쓰레드들이 요청들을 처리한다.

    프로세스 관리 지시어도 다르다:

    [MaxRequestsPerChild](http://isym77.cafe24.com/mod/mpm_common.html#maxrequestsperchild): 유닉스와 같이, 자식 프로세스가 요청을 얼마만큼 처리하고 죽을지를 조정한다. 그러나 유닉스와 달리 프로세스가 한번에 한 요청만을 처리하지않고 한번에 모든 요청을 서비스하기때문에, 설정한다면 매우 큰 값을 설정하길 권한다. 권장하는 기본값 MaxRequestsPerChild 0을 사용하면 자식 프로세스는 죽지않고 영원히 요청을 서비스한다.

    경고: 자식 프로세스는 새로 시작할 때마다 서버설정파일을 새로 읽는다. httpd.conf를 수정했다면, 자식 프로세스가 시작하지 않거나 예기치않은 결과가 발생할 수 있다.

    [ThreadsPerChild](http://isym77.cafe24.com/mod/mpm_common.html#threadsperchild): 이 지시어는 새로 추가되었다. 이 지시어는 서버가 사용할 쓰레드 개수를 지정한다. 이 값이 서버가 한번에 처리할 수 있는 최대 연결개수이기때문에, 사이트에 접속량이 많다면 충분히 큰 값을 설정해야 한다. 권장하는 기본값은 ThreadsPerChild 50이다.

  • 파일명을 아규먼트로 받는 지시어는 유닉스 파일명이 아닌 Windows 파일명을 사용해야 한다. 그러나 아파치 내부에서 유닉스식 이름을 사용하기때문에 백슬래쉬가 아닌 슬래쉬를 사용해야 한다. 드라이브 문자를 사용할 수 있다. 드라이브를 지정하지 않으면 아파치 실행파일이 있는 드라이브를 사용한다.

  • Windows용 아파치는 서버를 다시 컴파일하지 않고 실행중에 모듈을 읽어들일 수 있다. 기본값으로 아파치를 컴파일하면 Apache2modules 디렉토리에 여러 선택가능한 모듈을 설치한다. 이 모듈 혹은 다른 모듈을 사용하려면 새로 생긴 [LoadModule](http://isym77.cafe24.com/mod/mod_so.html#loadmodule) 지시어를 사용한다. 예를 들어, status 모듈을 사용한다면 (access.conf에 status관련 지시어와 함께) 아래와 같이 설정한다:

    LoadModule status_module modules/mod_status.so

    읽어들일 수 있는 모듈 만들기에 대한 정보도 있다.

  • 아파치는 Microsoft IIS와 다른 Windows 서버가 사용하는 ISAPI (Internet Server Application Programming Interface) 확장을 (즉, 인터넷 서버 프로그램) 읽어들일 수도 있다. 더 자세한 정보가 있다. 아파치는 ISAPI 필터를 읽어들일 수 없음을 주의하라.

  • CGI 스크립트를 사용한다면 [ScriptInterpreterSource](http://isym77.cafe24.com/mod/core.html#scriptinterpretersource) 지시어를 사용하여 아파치가 스크립트의 인터프리터를 찾는 방법을 설정할 수 있다.

  • Windows에서 .htaccess와 같은 파일명을 다루기 힘드므로, [AccessFilename](http://isym77.cafe24.com/mod/core.html#accessfilename) 지시어를 사용하여 디렉토리별 설정파일 이름을 변경하면 편하다.

  • Windows NT라면 아파치 시작시 발생한 오류를 Windows 이벤트 로그에 기록한다. 그래서 아파치가 보통 사용하는 error.log 파일을 사용할 수 없는 경우에 대비한다. Windows 이벤트 로그는 Windows NT 4.0에서는 이벤트 뷰어 프로그램으로, 최신 Windows 버전에서는 이벤트 뷰어 MMC 스냅인에서 볼 수 있다.

    Windows 9x에는 Windows 이벤트 로그가 없기때문에 시작시 발생한 오류를 기록하지 않는다.

아파치를 Service로 실행하기

Windows NT에서는 아파치를 service로 실행할 수 있다. Windows 9x에는 매우 실험적인 방법으로 비슷한 기능을 지원한다.

설치시 자동으로 아파치를 service로 설치할 수 있다. "모든 사용자"를 선택하면, 아파치 service가 만들어진다. "현재 사용자만"을 선택하더라도 설치후 직접 아파치를 service로 등록할 수 있다. service를 설치하려면 Administrators 그룹의 구성원이어야 한다.

아파치에는 Apache Service Monitor라는 도구가 있다. 이 도구를 사용하면 네트웍에 있는 다른 컴퓨터에 설치된 아파치 상태도 확인하고 관리할 수 있다. monitor로 아파치 service를 관리하려면 먼저 service를 (설치시 자동으로 혹은 직접) 설치해야 한다.

아파치 bin 하위디렉토리에서 명령행 프롬프트에 다음과 같이 입력하면 아파치를 Windows NT service로 설치한다:

apache -k install

설치할 service 이름을 지정하고 싶다면 다음 명령어를 사용한다. 컴퓨터에 아파치가 여러개 설치되있다면 이름을 다르게 주어야 한다.

apache -k install -n "MyServiceName"

service가 사용할 설정파일을 직접 지정하려면 다음과 같이 한다:

apache -k install -n "MyServiceName" -f "c:filesmy.conf"

-k install 외에 다른 파라미터를 사용하지 않으면, service 이름은 Apache2가 되고 설정파일은 confhttpd.conf가 된다.

아파치 service를 제거하기 쉽다. 간단히:

apache -k uninstall

다음과 같이 제거할 아파치 service를 지정할 수 있다:

apache -k uninstall -n "MyServiceName"

보통 아파치 service 시작, 재시작, 종료는 Apache Service Monitor나 NET START Apache2, NET STOP Apache2 같은 명령어 혹은 Windows 서비스 관리창에서 한다. 어떤 방법을 사용하든지 아파치 service를 시작하기 전에 설정파일을 검사해봐야 한다:

apache -n "MyServiceName" -t

명령행 옵션으로도 아파치 service를 조정할 수 있다. 설치한 아파치 serivce를 시작하려면:

apache -k start

명령행 옵션으로 아파치 service를 종료하려면:

apache -k stop

혹은

apache -k shutdown

실행중인 service를 재시작하여 설정파일을 다시 읽도록 할 수 있다:

apache -k restart

기본적으로 모든 아파치 service는 시스템 사용자 (LocalSystem 계정) 권한으로 실행하도록 등록된다. Windows 보안구조상 LocalSystem 계정은 파일시스템, named pipes, DCOM, secure RPC 등 어떤 방법을 사용하든지 네트웍에 접근할 수 없다. 그러나 해당 컴퓨터에서는 많은 권한을 가진다.

LocalSystem 계정에게 네트웍 권한을 절대로 주지 마라! 아파치가 네트웍 자원에 접근해야 한다면, 아래에서 설명하는 방법으로 아파치를 위한 별도의 계정을 만들어라.

아파치 service를 실행하기위한 별도의 계정을 만들 수도 있다. 특히 아파치가 네트웍 자원에 접근해야 한다면 이 방법을 강력히 권한다.

  1. 일반 도메인 사용자 계정을 만들고 암호를 기억하라.
  2. 새로 만든 계정에 서비스로 로그온운영 체제의 일부로 활동 권한을 부여한다. Windows NT 4.0에서는 User Manager for Domains에서 권한을 부여할 수 있고, Windows 2000과 XP에서는 아마도 "그룹 정책"을 사용해야 한다. "로컬 보안 설정" MMC 스냅인에서 직접 설정해줄 수도 있다.
  3. 새로 만든 계정이 Users 그룹에 속하는지 확인한다.
  4. 모든 문서와 스크립트 폴더에 (예를 들어 htdocscgi-bin) 대해 읽기 및 실행 (RX) 권한을 부여한다.
  5. 아파치 logs 디렉토리에 수정 (RWXD) 권한을 부여한다.
  6. Apache.exe 실행파일에 읽기 및 실행 (RX) 권한을 부여한다.

아파치 service를 실행하는 사용자에게 최소한 수정 (RWXD) 권한이 필요한 logs 하위디렉토리를 제외하고 Apache2 디렉토리 전체에 읽기 및 실행 (RX) 권한을 부여하는 것이 좋다.

계정에 "로컬 로그온"과 "서비스로 로그온" 권한이 있다면, 그 계정으로 로그온하여 계정이 스크립트를 실행하고 웹페이지를 읽으며 콘솔창에서 아파치를 시작할 수 있는지 검사해볼 수 있다. 여기서 문제가 없다면 아파치를 service로 실행해도 문제가 없다.

Error code 2186은 아파치가 필요한 네트웍 자원에 접근할 수 없다는 말로 service의 "로그온" 설정을 확인하라. 또, 아파치를 실행하는 계정의 권한을 살펴봐라.

아파치를 service로 실행하면 Windows Service Control Manager에서 오류문을 볼 수 있다. 예를 들어, 제어판에서 "서비스"를 사용하여 아파치를 시작하는 경우 다음과 같은 문구가 나올 수 있다:

Could not start the Apache2 service on COMPUTER Error 1067; The process terminated unexpectedly.

아파치 service를 시작할때 문제가 있으면 일반적인 이런 오류가 나온다. 실제 어디가 문제인지 알려면 아파치를 콘솔 프로그램으로 실행해보라.

Windows 9x에서 아파치는 Windows NT의 service와 비슷한 방법을 지원한다. 그러나 매우 실험적인 기능이다. 실제 서비스에 사용할만큼 안정적이지 않고 앞으로 개선될지 보장할 수도 없다. 위험하므로 혹시나 사용한다면 주의해서 사용해야 한다!

두가지 service의 중요한 차이점은 다음과 같다:

  • 아파치가 성공적으로 시작하면 배경에서 실행한다. 예를 들어, 데스크탑에 바로가기를 만들어서 다음 명령을 실행하는 경우,

    apache -n "MyServiceName" -k start

    service가 성공적으로 시작하면 콘솔창이 생겼다가 금방 사라진다. httpd.conf 설정파일에 잘못된 내용이 있는 등 아파치 시작시 오류가 발생하면 콘솔창을 계속 보인다. 콘솔창은 문제의 원인을 파악하는데 도움을 주는 오류문을 보여준다.

  • Windows 9x는 NET STARTNET STOP 명령어를 지원하지 않는다. 명령프롬프트에서 -k 옵션을 사용하여 아파치 service를 조정해야 한다.

  • 아파치와 Windows 9x는 네트웍 권한을 가진 특정 사용자로 아파치를 실행하지 못한다. 사실 Windows 9x는 보안을 제공하지도 않는다. 이것이 바로 Apache Software Foundation이 Windows 9x 시스템을 공개 웹서버로 사용하길 권하지 않는 이유다. 사용자가 웹 컨텐츠를 개발하고 아파치 서버 학습을 돕기위해, 아니면 안전한 사설 네트웍에 위치할 인트라넷 서버를 위해, Windows 9x를 지원할 뿐이다.

아파치가 콘솔 프로그램으로 동작함을 확인하였다면 Windows NT에서와 같은 명령어로 가상 service를 설치, 조절, 제거할 수 있다. 또, Apache Service Monitor를 사용하여 Windows 9x 가상 service를 관리할 수 있다.

아파치를 콘솔 프로그램으로 실행하기

일반적으로 아파치를 service로 실행하길 권한다. 그러나 명령행에서 실행하는게 편한 경우가 있다 (Windows 9x에서는 service를 안정적으로 지원하지 않기때문에 명령행에서 아파치를 실행하는 방법을 권한다).

아파치를 콘솔 프로그램으로 실행하려면, 명령행에서 다음 명령어를 사용한다:

apache

아파치는 Control-C를 눌러서 정지할 때까지 실행된다.

또, 시작 메뉴 --> 프로그램 --> Apache HTTP Server 2.0.xx --> Control Apache Server에 설치된 Start Apache in Console 바로가기로 아파치를 실행할 수 있다. 바로가기를 실행하면 콘솔창을 열고 그 안에서 아파치를 실행한다. 아파치를 service로 설치하지 않았다면, 아파치를 실행하는 콘솔창에서 Control-C를 눌러 아파치를 중단할때까지 창이 떠있다. 이 경우 서버는 몇초안에 종료한다. 그러나, 아파치를 service로 설치하였다면 바로가기는 service를 시작한다. 아파치 service가 이미 실행중이라면 바로가기는 아무일도 하지 않는다.

다른 콘솔창을 열고 다음과 같이 입력하여 실행중인 아파치를 종료할 수 있다:

apache -k shutdown

이 방법은 아파치가 현재 작업을 마치고 점잖게 종료할 수 있기때문에 Control-C 보다 낫다.

또, 아파치를 재시작할 수 있다. 이 경우 설정파일을 다시 읽는다. 진행중인 작업을 중간에 끊지않고 완료한다. 아파치를 재시작하려면:

apache -k restart

유닉스용 아파치에 익숙한 사람을 위해: 이 명령어는 kill -TERM _pid_kill -USR1 _pid_의 Windows판이다. 명령행 옵션 -k는 유닉스 kill 명령어 이름을 본따 지었다.

아파치 콘솔창이 즉시 혹은 시작후 갑자기 닫치면 시작 메뉴 --> 프로그램의 명령 프롬프트를 실행한다. 아파치를 설치한 폴더로 가서 apache 명령어를 실행해보고 발생한 오류문을 살펴본다. 그리고 logs 폴더로 가서, 설정파일이 잘못되었는지 error.log 파일을 살펴본다. 아파치를 설치할때 기본값을 사용했다면 다음과 같다:

c: cd "Program FilesApache GroupApache2bin" apache

아파치가 정지할 때까지 기다리거나 Control-C를 누른다. 그리고 다음과 같이 입력한다:

cd ..logs more < error.log

아파치를 다룰때 아파치가 어떻게 설정파일을 찾는지 아는 것이 중요하다. 두가지 방법으로 명령행에서 설정파일을 지정할 수 있다:

  • -f는 설정파일의 절대경로 혹은 상대경로를 지정한다:

    apache -f "c:my server filesanotherconfig.conf"

    혹은

    apache -f filesanotherconfig.conf

  • -n은 아파치 service를 선택하고, 해당 service의 설정파일을 사용한다:

    apache -n "MyServiceName"

두 경우 모두 설정파일이 적절한 [ServerRoot](http://isym77.cafe24.com/mod/core.html#serverroot)를 지정해야 한다.

-f-n으로 설정파일을 지정하지 않으면, 아파치는 confhttpd.conf와 같이 서버에 컴파일된 파일명을 사용한다. 이 기본 경로는 설치 디렉토리에 상대적이다. 다음과 같이 -V 옵션으로 아파치를 실행하면 SERVER_CONFIG_FILE이란 항목에서 서버가 사용할 설정파일을 알 수 있다:

apache -V

아파치는 다음 순서대로 [ServerRoot](http://isym77.cafe24.com/mod/core.html#serverroot)를 찾는다:

  1. -C 명령행 옵션에 사용한 [ServerRoot](http://isym77.cafe24.com/mod/core.html#serverroot) 지시어.
  2. -d 명령행 옵션.
  3. 현재 작업 디렉토리.
  4. 바이너리 설치를 했다면 설치할때 만든 registry 항목.
  5. 서버에 컴파일된 server root. 기본값은 /apache이고, apache -V를 실행하면 HTTPD_ROOT라는 항목에서 확인할 수 있다.

설치할때 윈도우즈 레지스트리에 버전 특유의 레지스트리 키를 만든다. 키의 위치는 설치 종류에 따라 다르다. install Apache for all users를 선택하였다면 HKEY_LOCAL_MACHINE 아래에 다음과 같은 키를 만든다 (물론 버전번호는 아파치 버전마다 다르다):

HKEY_LOCAL_MACHINESOFTWAREApache GroupApache2.0.43

"모든 사용자"를 대상으로 아파치를 설치하였다면 HKEY_CURRENT_USER 아래 키가 생긴다. 내용은 현재 로그온한 사용자에 따라 다르다:

HKEY_CURRENT_USERSOFTWAREApache GroupApache2.0.43

키 이름이 서버에 컴파일되기때문에 현재 버전을 건드리지않고 새로운 버전을 설치하여 테스트해볼 수 있다. 물론 새 버전을 다른 버전과 같은 디렉토리에 설치하지않도록 주의해야 한다.

바이너리 설치를 하지 않은 경우 아파치는 레지스트리 키가 없다고 불평할 수 있다. 서버가 다른 방법으로 설정파일을 찾을 수 있다면 이 경고를 무시해도 된다.

키의 값은 [ServerRoot](http://isym77.cafe24.com/mod/core.html#serverroot) 디렉토리이며, 이 디렉토리에 conf라는 하위디렉토리가 있다. 아파치를 시작하면 이 하위디렉토리에서 httpd.conf 파일을 읽는다. 이 파일에 나오는 [ServerRoot](http://isym77.cafe24.com/mod/core.html#serverroot) 지시어가 레지스트리 키에 나온 디렉토리와 다르다면, 아파치는 레지스트리에서 얻은 값을 무시하고 앞으로 설정파일에 나온 디렉토리를 사용한다. 아파치 디렉토리나 설정파일을 다른 장소로 복사하면 반드시 httpd.conf 파일에 있는 [ServerRoot](http://isym77.cafe24.com/mod/core.html#serverroot) 지시어를 그 위치로 수정하라.

정상적으로 설치되었는지 검사하기

(콘솔창이나 service를 통해) 아파치를 시작하면 (설정파일의 [Listen](http://isym77.cafe24.com/mod/mpm_common.html#listen) 지시어를 수정하거나 아파치를 "현재 사용자만" 대상으로 설치하지 않는 경우) 80번 포트를 기다린다. 브라우저를 시작하고 URL을 입력하여 서버의 기본 페이지에 접근하다:

http://localhost/

아파치는 아파치 설명서 링크가 있는 환영페이지를 보여줘야 한다. 아무 일도 일어나지 않거나 오류가 나오면, logs 하위디렉토리에 있는 error.log 파일을 살펴봐라. 호스트가 네트웍에 연결되있지 않거나 DNS (Domain Name Service) 설정에 문제가 있다면 다음 URL을 사용해야 한다:

http://127.0.0.1/

기본 설치가 동작하면 conf 하위디렉토리에 있는 파일을 적절히 설정한다. 또, Windows NT 아파치 service 설정을 수정한 경우 먼저 명령행에서 아파치를 시작하여 오류가 발생하지않는지 확인해야 한다.

아파치가 다른 TCP/IP 프로그램과 같은 포트를 공유할 수 없기때문에 아파치를 시작하기 전에 다른 서비스를 중단, 제거, 재설정해야 할지도 모른다. 다른 웹서버나 특정 방화벽 서버스와 충돌할 수 있다.

Share this:

Leave a Reply

Your email address will not be published. Required fields are marked *

Let's connect and create
something awesome together!
2023 - Copyright, All Rights Reserved, Made by ZEMNA.NET with ❤️
crossmenu linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram