태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
Windows용 Apache에 SSL 설정하기

o 패키지 다운로드
    - http://www.apache.org 또는
    - http://mirror.apache-kr.org 에 접속하여 SSL을 지원하는 바이너리 파일 선택
※ 현재 최신 안정버전(2.0대)은 apache_2.0.61-win32-x86-openssl-0.9.7m.msi 임(x86용)

o 패키지 설치
    - 설치과정 생략(일반 패키지 설치와 비슷)
사용자 삽입 이미지

기본설정

※ 설치디렉토리는 기본적으로 "C:\Program Files\Apache Group\Apache2"이다.

o bin 디렉토리로 이동("C:\Program Files\Apache Group\Apache2\bin")하여
   설치디렉토리 밑의 bin 디렉토리에 있는 ssleay32.dll, libeay32.dll 파일을 시스템디렉토리,
   (Windows 2000의 경우 C:\WINNT, Windows XP, 2003등은 C:\Windows)아래 system32
   디렉토리로 복사한다.

  PROMPT> copy ssleay32.dll C\WINDOWS\system32\
   PROMPT> copy libeay32.dll C\WINDOWS\system32\

사용자 삽입 이미지

o openssl.conf 파일 편집
    - 인증서를 위한 csr 파일을 만들때 입력하는 부분을 지정
    - _default로 된 값을 설정하면 추가 입력이 필요없다.
    - openssl.conf 파일은 conf 디렉토리 밑에 있다.(위치는 지정하면 되므로 상관없다)
사용자 삽입 이미지

openssl.conf 파일 편집


o CSR 생성(이과정을 마치면 privkey.pem, ww.my-server.csr 파일이 생성됨)

    PROMPT> openssl req -config openssl.cnf -new -out www.my-server.csr

※ "Common Name" 부분에 웹서버의 정확한 이름(FQDN)을 입력하지 않으면 접속시
    인증서의 이름과 다르다는 내용이 나온다.
사용자 삽입 이미지

o privkey.pem 파일에서 passphrase를 제거
    - 이과정은 private key에서 passphrase를 제거하는 과정이다.
    - key값은 아파치 서버와 관리자만 읽을 수 있어야 한다.

    PROMPT> openssl rsa -in privkey.pem -out www.my-server.key

사용자 삽입 이미지
    - .rnd 파일이 생성되는데 이 파일에는 키생성을 위한 entropy정보를 담고 있고
       private key에 대한 암호학적 공격에 사용될 수 있기 때문에 .rnd 파일을 삭제한다.
사용자 삽입 이미지

o Self Sign
    - 이 과정은 CA로부터 실제 인증서를 받기 전까지 사용할 수 있는 self-signed 인증서를
      생성하는 과정이다. 이 인증서는 1년 후에 expire된다. -days 옵션을 통해 날짜를 증가시킬
      수 있다.

    PROMPT> openssl x509 -in www.my-server.csr -out www.my-server.cert -req -signkey www.my-server.csr.key -days 365

사용자 삽입 이미지

o 아파치 설치 디렉토리의 conf 디렉토리 아래에 ssl 디렉토리를 만든다.

    PROMPT> cd "C:\Program Files\Apache Group\Apache2\conf"
    PROMPT> mkdir ssl

o 인증서 파일(www.my-server.cert)과 키(www.my-server.key) 파일을 지정한 디렉토리로 옮긴다.

    PROMPT> cd "C:\Program Files\Apache Group\Apache2\bin"
    PROMPT> move www.my-server.cert ..\conf\ssl\
    PROMPT> move www.my-server.key ..\conf\ssl\

o httpd.conf 수정(mod_ssl 사용하도록)
사용자 삽입 이미지
사용자 삽입 이미지

o ssl.conf 수정
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지

o 설정파일 문법 검사 및 아파치 시작
사용자 삽입 이미지

o 네트워크 open port 확인
사용자 삽입 이미지

o 서비스 접속 확인
사용자 삽입 이미지
사용자 삽입 이미지

o 인증서 정보 확인
사용자 삽입 이미지

o 참고 URL

○ self-signed CA 관련(mod_ssl 관련 FAQ)
http://www.modssl.org/docs/2.8/ssl_faq.html


○ apache+ssl
http://www.thompsonbd.com/tutorials/apachessl.php



출처 : http://pgclks.tistory.com/tag/apache+ssl+windows

Apache Access log format



 - LogFormat 옵션 설명

%a

원격지 IP 주소

%A

로컬 IP 주소

%B

HTTP 헤더를 제외하고 전송된 바이트

%b

HTTP 헤더를 제외하고 전송된 바이트. CLF 포맷에서는 , 전송된 것이 없을 경우 0 으로 표시하기 보다는 - 로 표시한다.

%{FOOBAR}e

서버에 의해 지정된 환경변수

%f         

파일 이름

%h         

원격지 호스트

%H                    

요청한 프로토콜

%{Foobar}i

Foobar 의 내용: 클라이언트에서 서버로 요청된 헤더라인으로 예를 들자면, Referer 헤더일 경우 %{Referer}i 로 사용되어 진다. 

%l         

원격지 사용자이름 (이것이 사용되어 지기 위해서는 IdentityCheck 가 반드시 enable 되어져 있어야 한다)

%m                    

요청방식

%{Foobar}o

서버에서 응답되어 지는 HTTP 헤더. 예를들면 :

%{Content-Type}o, %{Last-Modified}o

%p         

요청을 처리하는 서버의 참조적인 포트

%P        

현 요청을 처리하고 있는 아파치 자식 프로세서의 프로세스 ID

%q                     

쿼리 문자열 (쿼리가 있을 경우 ? 뒤로 쿼리문이 포함되며 그렇지 않을 경우 공백으로 처리된다)

%r         

HTTP 메소드를 포함한 요청의 첫 라인

%s         

HTTP 상태코드. 만약 클라이언트의 요청이 내부적인 리다이렉트를 발생시켰을 경우 %s 는 초기 요청의 상태코드를 %>s 는 최종상태 코드를 포함하게 된다. 일반적으로, %s 의 사용 보다는 %>s 가 유용하다.

%t         

요청한 시간과 날짜 (standard english format)

%{format}t

strftime() function 을 이용한 포맷형식에 따른 시간

[Day/Month/Year:Hours:Minutes:Seconds Time Zone]

%T        

요청을 처리하는데 걸린 시간 (초)

%u         

인증이 요청된 원격 사용자 이름

%U        

요청된 URL

%v         

요청을 처리하는 서버의 참조적인 서버 이름

%V        

UseCanonicalName 설정에 따른 서버 이름


httpd.conf
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent


host설정
CustomLog 홈경로/www_log/access_log [combined, common, referer, agent]중 선택
로그를 남기는 방법
로그레벨은 LogLevel
을 통해 레벨을 결정, debug 와 같은 레벨을 선택하게 되면 아파치에서 발생하는 모든 에러메시지와 간단한 내용들도 로그에 남게 되므로, 자원의 공간 및 프로세스 타임을 낭비하는 결과를 초래하게 됩니다.



로그를 남기는 방법
로그레벨은 LogLevel 을 통해 레벨을 결정, debug 와 같은 레벨을 선택하게 되면 아파치에서 발생하는 모든 에러메시지와 간단한 내용들도 로그에 남게 되므로, 자원의 공간 및 프로세스 타임을 낭비하는 결과를 초래하게 됩니다.

httpd.conf 설정
   
LogLevel           [Emerg, Alert, Crit, Error, Warn, Notice, Info, Debug]중 선택

      Emerg

      불안정한 시스템 상황

      Alert

      즉각적인 조치 필요

      Crit

      중대한 에러

      Error

      비교적 중대하지 않은 에러

      Warn

      경고

      Notice

      중대한 것은 아닌 일반적인 메시지

      Info

      정보

      Debug

      디버그 레벨


 

Tag // ACCESS, apache, LOG

Apache httpd.conf 설정

httpd.conf 파일은 크게 세부분으로 나누어져 있다.

Section 1: Global Environment : 아파치 전체적인 영향이 미치는 설정
Section 2: 'Main' server configuration : 주 서버에 대한 설정
Section 3: Virtual Hosts : 가상 호스트에 대한 설정

자, 그럼 이제부터 이 아파치웹서버의 모든 환경을 설정하는 아파치환경파일 httpd.conf파일의 설정방법에 대해서 상세히 알아보도록 하자.


### Section 1: Global Environment

전제환경설정 파트로 Section 1에서 설정하는 것들은 아파치 웹서버에
전반적인 영향을 미친다.

ServerType standalone

서버의 구동방법으로는 standalone과 inetd방식이 있는데, standalone
방식은 하나의 웹데몬(아파치서버)이 클라이언트의 접속을 모두 처리하는
방식으로 응답속도가 빠른 방법으로 주로 이방식을 사용한다. inetd 방식은
inetd라는 시스템의 /etc디렉토리 끝에 존재하는 inetd라는 슈퍼데몬이
클라이언트의 접속요구가 있을 때마다 웹서버를 구동하는 방식이다.
일반적으로 응답속도가 빠르고 효율적인 standalone으로 설정하여 사용한다.


ServerRoot "/usr/local/apache"

아파치서버의 홈디렉토리를 지정하며 절대경로로 지정한다. 이후로 나오는
대부분의 패스들은 이 경로에 대한 상대경로로 지정이 된다. 예를 들어
환경설정파일, 에러로그파일등의 상대경로의 기준이 되는 위치이다.


LockFile logs/accept.lock

아파치 컴파일시 USE_FCNTL_SERIALIZED_ACCEPT나
USE_FLOCK_SERIALIZED_ACCEPT으로 컴파일 했을 때 사용되는
LockFile의 경로지정시에 사용된다. 가급적 기본값으로 사용한다.


PidFile logs/httpd.pid

PidFile 설정은 ServerType을 Standalone으로 설정했을때만 유효한
것으로 아파치 서버의 프로세스가 생성되어 있을 때 그 프로세서ID(PID)를
기록하는 파일을 지정한다. 당연히 아파치서버가 재시작되거나 과부하로
인해 PID가 바뀌게 될 경우에는 이 파일의 PID값도 바뀌게 된다. 즉
다시말해서 여기서 지정된 파일(httpd.pid)에 실행되고 있는 아파치서버의
프로세스번호(PID)값이 기록된다고 하면 정답이다. ServerRoot를 기준으로한
상대경로로 지정된다. 절대경로로 지정하려면 "/"로 시작하는 절대경로를
적어주면 된다.



ResourceConfig conf/srm.conf
AccessConfig conf/access.conf

아파치 서버의 환경설정파일은 3개이au httpd.conf, srm.conf, access.conf
가 그것이다. 그러나 하나의 설정파일로 하는 것이 효율적이기 때문에
지금은 httpd.conf파일안에 3개의 파트(Section)로 나누어서 하나의
파일안에서 설정을 하고 있다. srm.conf와 access.conf파일의 내용은 현재
비어있는 상태이지만, 필요하다면 이 파일 내에도 설정을 할 수 있다.
아파치 서버가 실행이 될 때는 httpd.conf, srm.conf, access.conf 순으로
언제나 이 3개의 파일을 모두 읽고 난뒤에 실행이 되기 때문이다. 만약 이
두 개의 파일을 서버가 무시하도록 하려면 다음과 같이 하거나 "#"으로 붙여
두면 주석처리되어 무시된다.

ResourceConfig /dev/null
AccessConfig /dev/null


Timeout 300

클라이언트의 요청에 의해 서버와 연결이 되었을 때 클라이언트와
서버간에 아무런 메시지가 발생하지 않았을 때 오류로 처리될 시간을
초단위로 설정한다. 초기값은 1200이며 보통은 300초로 지정을 한다.
네트웍의 속도가 나쁠수록 수치값은 높게 설정하는 것이 좋다.

KeepAlive On

접속한 채로 특별한 요청없이 지속적인 연결을 허용할 것인지를 설정한다.
허용하지 않으려면 off

MaxKeepAliveRequests 100

클라이언트가 접속된 시간동안 아파치서버에 요청할 수 있는 최대의
개수를 지정한다. 0을 지정하면 제한없음을 의미하며, 서버의 성능향상을
위하여 가능한 높은 값이 좋다.

KeepAliveTimeout 15

아파치 서버는 같은 접속상태의 클라이언트에서 여기서 지정한 초만큼의
요청이 없었을 때 접속을 끊게 된다.

MinSpareServers 5
MaxSpareServers 10

아파치 웹서버는 성능향상과 빠른 응답속도를 위해 유휴서버(현재
서비스대기 중인 프로세스)를 만들게 되는데 이 유휴서버의 개수는 시스템의
상황에 따라 달라지게 된다. 유휴서버가 MinSpareServers의 개수(5) 보다
적게되면 추가로 생성을 하게 되며 MaxSpareServers의 개수(10)보다 많게
되면 죽이게 된다. 즉, 유휴서버의 개수를 적절히 조절하기 위한 것이라
생각하면 된다.


StartServers 5

아파치 웹데몬이 구동될 때 자식프로세스를 몇 개로 할 것인가를
지정한다. 시작할 때 동시에 띄우게 될 웹데몬의 개수이다. 그러나 웹데몬이
구동되고 난 뒤엔 시스템의 상황(부하율등)에 따라 대부분 합리적인
개수만큼 동적으로 생성되었다가 죽기도 하므로 큰 의미를 가지는 것은
아니다.

MaxClients 150

아파치웹서버에 접근할 수 있는 클라이언트의 최대갯수는 이 상한값으로
제한한다. 여기서 지정한 개수이상의 클라이언트의 요청이 생긴다면
아파치는 응답하지 않고 이 요청을 무시한다. 이를 제한하는 이유는
시스템의 자원을 아파치 웹서버가 무한정 차지하는 것을 방지하기 위한
것이다.

MaxRequestsPerChild 30

아파치 웹서버의 자식프로세스들이 클라이언트의 요청 개수를 지정한다.
만약 자식프로세스가 이 값만큼의 클라이언트요청을 받았다면 이
자식프로세스는 자동으로 죽게된다. 이 값이 0으로 설정이 된다면
자식프로세스가 자동으로 죽는일은 없을 것이다. 그러나 0아닌 다른 값으로
설정함으로서 프로세스의 수를 적절히 조절하여 시스템의 부하조절과
자원낭비를 어느정도 방지 할 수 있다.

Listen 3000
Listen 12.34.56.78:80

시스템의 기본값이외에 다른 IP Address와 포트에 대해서도 연결할 수
있도록 해 준다. 환경설정파일(httpd.conf) 맨뒤에 나오는 가상호스트(Virtual
Host)부분에서 설정되는 가상호스트를 설정하기 위해 필요하다.


BindAddress *

서버가 응답할 수 있는 IP Address를 설정하는 것이다. 하나의 시스템에
있는 아파치웹서버 하나로 여러 웹서버처럼 관리하는 웹호스팅서비스등에서
많이 이용하는 것으로 여러 IP Address를 인식할 수 있게 한다. "*"으로
설정이 되었다면 모든 IP Address에 대해 응답할 수 있으며, IP Address를
지정한다면 지정한 IP Address에 대해서만 응답할 수 있게 된다. 여러개의
IP Address를 ISP로부터 할당받아서 웹호스팅서비스를 하고자 한다면
이부분에서 지정해 주면된다. 이 설정파일의 맨 뒷부분에 나오는
<VirtualHost>~</VirtualHost>부분의 IP bind 가상호스트부분에서 아파치
웹서버가 응답할 수 있도록 하려면 여기서 IP Address를 지정해 줘야 한다.

ExtendedStatus On

server-status로 아파치웹서버의 상태를 상태를 모니터링 할 때
"자세한상태정보"기능을 제공할 것인지(On) 아닌지(Off)를 설정하는 것이다.

### Section 2: 'Main' server configuration

Section 2에서 설정하는 항목들은 아파치의 주된서버가 사용할 값들을
지정한다. <VirtualHost>에 정의된 가상호스트들에서 지정하지 않는 것은
여기서 지정된 값이 기본값으로 적용된다. 또한 여기서 지정하는 값을 각
<VirtualHost>내에도 지정할 수 있으며 이경우엔 각<VirtualHost>내에서
지정한 값이 우선적용된다.

Port 80

아파치웹서버의 기본포트를 지정한다. 특별하게 사용하는 것이 아니라면
80번으로 해둬야 한다. 사용가능한 포트는 0 ~ 65535이며 1024이하의
포트번호는 시스템에서 특별하게 예약되어 있으므로 80번 이외의 다른
포트를 사용하려면 1024이상의 포트번호를 지정해서 사용해야 할 것이다.
특별한 지정이 없다면 <VirtualHost>에 정의된 각각의 가상호스트들의
기본포트가 된다. 만약 <VirtualHost> 내에서 Port가 지정이 된다면 그
포트번호가 우선한다.

(특별히 PORT를 따로 지정해 줄 필요가 있을 때는 따로 지정해 주며,
이때는 웹서버로 접근할 때 반드시 따로지정한 PORT번호로 접근해야 한다.
예를들어 Port 1234로 지정했다면, 접근시 : http://www.domain.co.kr:1234
로 접속해야한다. 단, 80번은 default이므로 Port번호를 입력하지 않아도
도메인만으로 그냥 접근할 수 있다. 예: http://www.domain.co.kr )

User nobody
Group nobody

아파치 웹데몬이 요청을 받았을 때 여기서 지정한 user와 group으로
응답을 하게된다. 이 설정은 ServerType이 Standalone방식이며, 아파치의
실행이 root권한으로 실행이 되었을 때 유효한 것이다. 많은
웹서버관리자들이 nobody로 설정을 해 두고 있으며, 만약 시스템에 nobody
user가 없다면 새로생성(useradd)을 해야 할 것이다. 단, root로 설정하는
것은 절대로 있어서는 안되며 nobody이외의 다른 시스템사용자 id로 지정을
한다면 정말 신중히 모든면(시스템 보안 및 자원사용등)에서 깊게 고려를
해봐야 한다.

ServerAdmin webmaster@www.domain.co.kr

여기서 지정하는 email address는 웹문서 로딩에러등의 문제에서
클라이언트측으로 보내질 메일주소값이다. 대부분
웹서버관리자의 email address로 설정을 한다.

ServerName new.host.name

클라이언트에게 보여주는 호스트이름을 지정한다. www를 쓰지않는
호스트에서 www를 쓰는 것처럼 보이게 할 수 있다. 예를 들어
bbs.manualand.co.kr을 www.manualand.co.kr로 지정해서 쓸 수 있다.
이곳에 IP Address를 적게 되면 클라이언트에는 Ip Address를 보여준다.

documentRoot "/usr/local/apache/htdocs"

아파치 웹서버의 웹문서가 있는 경로를 지정한다. 예를 들어
"http://www.manualand.co.kr/index.html"의 초기 문서라면 이 초기문서의
절대 경로는 여기서 지정된 "/usr/local/apache/htdocs/index.html"이 된다.
경로의 맨 마지막에 "/"를 추가해서는 안된다. Alias를 사용하여 다른 위치를
지정할 수도 있다.

<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>

<Directory>에서 지정되는 값에 대한 옵션은 다음과 같은 의미를 가지고
있다.
None : 일단 모든허용을 하지 않는다.
All : 모든허용을 한다.
Indexes :
Includes :
FollowSymlinks :
ExeCGI :
MultiViews :


UserDir public_html

하나의 아파치 웹서버에서 여러 사용자의 홈페이지를 별도로 만들어
관리할 때 필요한 개별 가입자의 홈페이지 디렉토리이름이다. 예를 들어
sspark이란 계정가입자의홈페이지는 "http://manualand.co.kr/~sspark"라는
홈페이지를 가지고 있을 때 sspark의 계정에서 "public_html"이란
디렉토리가 홈디렉토리가 되어 이 디렉토리에 있는 초기문서 index.html을
불러서 보여주게 된다.

<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch
IncludesNoExec
<Limit GET POST OPTIONS PROPFIND>
Order allow,deny
Allow from all
</Limit>
<Limit PUT DELETE PATCH PROPPATCH MKCOL COPY
MOVE LOCK UNLOCK>
Order deny,allow
Deny from all
</Limit>
</Directory>

계정사용자의 홈페이지(public_html)의 접근에 대한 옵션을 지정한 것이다.


DirectoryIndex index.html

디렉토리만을 지정했을 경우에 그 디렉토리에서 찾게될 문서의 순서를
지정해 준다. 즉, 디렉토리 이름만을 지정하더라도 여기서 지정한
index.html을 찾아서 웹브라우즈에 보여준다. 여러개의 파일을 지정할 수
있으며, 이런 경우에는 순서대로 찾아서 보여준다. 예를 들어
"DirectoryIndex index.html index.htm"로 지정했다면 먼저 "index.html"을
찾아서 있다면 이 파일을 로딩하고, "index.html"이 없다면 "index.htm"을
찾아서 로딩해 준다.

AccessFileName .htaccess

디렉토리별로 접근제어할 정보(ID, Password)를 담고 있는 파일을
지정한다. 디렉토리별로 인증을 거쳐서 접근할 수 있는 설정을 하기위한
것이다. 예를 든다면 어떤 홈페이지의 전부나 혹은 일부에로 접근하려고 할
때 ID, Password를 묻는 창이 뜨면서 맞게 입력한 경우에만 접근허용하는
것이다. 보안상의 이유로 이 파일의 이름을 다른 이름으로 바꾸로 싶다면
".htaccess"대신에 다름이름을 적어주면 된다.

<Files ~ "^.ht">
Order allow,deny
Deny from all
</Files>

바로위에서 설정한 파일(".htaccess")의 내용을 볼 수 없게 할 때 사용하는
옵션이다. 보안상의 이유로 이 옵션은 설정해 두는 것이 좋다. 만약 이
옵션을 주석처리해 둔다면 ".htaccess"파일에 대한 보안은 누구도 장담할 수
없을 것이다.


UseCanonicalName On


TypesConfig conf/mime.types

웹서버의 mime type을 지정한 파일을 지정한다. mime.types파일은 서버에
의해 리턴될 수 있는 파일명과 mime형식을 기술해 놓은 파일이다.

DefaultType text/plain

mime.types 파일에 정의 되어있지 않은 파일형식에 대한 요청을 받았을 때
알 수 없는 문서타입에 대하여 사용할 기본적인 mime 타입을 정해둔다.


HostnameLookups Off

웹서버의 로그(access_log)를 지정하는 Format에서 "DNS Lookup"으로
지정하였을 때, domain으로 남길 것인가, IP Address로 남길 것인가를
지정한다. Default로 Off는 IP Address로 남기는 것이며, Domain으로 변경할
필요가 없으므로 on으로 설정한 것보다는 속도가 조금빠르다.on으로 하게
되면 IP address를 IP Domain으로 변환해야 하므로 속도가 조금 느릴 수
있다.

ErrorLog logs/error_log

아파치 웹서버의 에러로그 기록파일을 지정한다. 참고할 사항은 맨
마지막에 설정하는 <VirtualHost>부분에서 각서버에 대한 에러파일을
지정해 두지 않으면 그에 대한 에러로그도 여기에 기록되며, 지정해 두게
되면 그에 해당하는 로그는 이 파일에 기록되지 않는다.

LogLevel warn

바로위에서 설정한 에러로그 파일에 얼마나 자세하게 적을 것인지를
결정한다. 다음에 해당하는 순서대로 중요도가 정해진다. " debug → info →
notice → warn → error → crit → alert! → emerg "

LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i"
"%{User-Agent}i"" combind
LogFormat "%h %l %u %t "%r" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

바로 아래에서 사용할 CustomLog에서 사용할 몇가지 로그형식의 별명을
정한 곳이다.
웹서버의 관리자나 서버관리자는 이 부분을 특히 유심히 봐둬야 한다.
웹서버의 로그를 어떤 식으로 남길 것인가를 결정하는 Format을 지정하는
곳이다. 원하는 정보를 지정해서 볼 수 있으므로, 관리자에게 필요한
Format으로 설정해야 하며, 또한 접속통계를 내기에 적당한 Format으로
설정해 둬야 한다.

CustomLog logs/access_log common

위에서 정한 로그형식(여기선 common)대로 로그를 남기게 된다.
맨마지막에서 지정하는 <VirtualHost>부분에서도 아파치 1.3.9버전 부터는
CustomLog를 가상호스트별로 지정할수 있도록 CustomLog를 제공한다.
<VirtualHost>에서 CustomLog를 지정하지 않으면 여기서 지정한 형식대로
로그를 남기게 되며 <VirtualHost>부분에서 CustomLog를 지정했을
경우에는 여기서 지정한 로그형식은 무시된다.

#CustomLog logs/referer_log referer
#CustomLog logs/agent_log agent
#CustomLog logs/access_log combined

위에서 지정한 4가지의 로그형식(combind, common, referer, agent)중에서
원하는 부분의 #(주석행)을 제거하면 지정된다.

ServerSignature On

서버가 생성하는 문서(error documents, FTP directory listings,
mod_status and mod_info output etc., but not CGI generated documents)의
trailing footer line의 설정을 가능하게 한다.

Alias /icons/ "/usr/local/apache/icons/"

필요한 만큼의 디렉토리 별칭을 만들어 쓸 수 있다. 사용하는 형식은
다음과 같다.
Alias fakename(가상이름) realname(진짜이름)

ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"

ScriptAlias는 서버스크립트를 포함한다. ScriptAlias는 실제디렉토리 안에
들어있는 문서를 서버에 의해 응용프로그램으로 취급되어 실행되는 것을
제외하고는 근본적으로 Aliases와 같다.


IndexOptions FancyIndexing

IndexOPtions는 디렉토리목록을 표시할 때 사용할 옵션을 지정한다.
Standard는 표준적인 디렉토리를 나타내며, FancyIndexing은 좀더 예쁜
디렉토리목록을 표시해 준다.


아래에서 지정하는 AddIcon으로 시작하는 설정은 바로위에서 설정한
디렉토리인덱싱 옵션을 FancyIndexing으로 한 경우에 해당하며 디렉토리
목록을 표시할 때 각 파일 확장자에 따라서 어떤 아이콘을 선택하여 보여줄
것인지를 지정한다.

AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*

AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core

AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^


DefaultIcon /icons/unknown.gif

여기서 지정한 확장가가 아닌 경우에 여기서 지정한 기본아이콘으로
보여준다.

AddDescription "GZIP compressed document" .gz
AddDescription "tar archive" .tar
AddDescription "GZIP compressed tar archive" .tgz

AddDescription은 서버가 생성한 인덱스의 파일 뒤에 간단한 설명을
표시할 때 사용한다. 이 설정은 IndexOptions가 FancyIndexing으로
설정되었을때만 표시되며, 설정형식은 다음과 같다.
형식 : AddDescription "표시할 설명" 파일확장자

ReadmeName README

ReadmeName은 디렉토리목록표시 뒤에 붙여서 보여줄 README파일의
이름을 지정한다.(일종의 꼬릿말)

HeaderName HEADER

HeaderName은 디렉토리목록표시 앞에 붙여질 파일의 이름을 지정한다.
(일종의 머릿말)

IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

디렉토리목록을 인덱싱할 때 제외할 파일명을 지정한다. 즉 디렉토리
목록에 포함하지 않을 파일을 지정한다. 쉘스타일의 와일드카드(*, ?)가
허용된다.

AddEncoding x-compress Z
AddEncoding x-gzip gz tgz

AddEncoding은 특정브라우즈(Mosaic/X 2.1+)에서 받고있는 중에 정보에
대한 압축해제를 할 수 있도록한다. 단 모든 웹브라우즈에서 이 기능을
제공하는 것은 아니다.

AddLanguage en .en
AddLanguage fr .fr
AddLanguage de .de
AddLanguage da .da
AddLanguage el .el
AddLanguage it .it

AddLanguage는 문서의 언어를 지정하게 한다.

LanguagePriority en fr de

언어의 우선순위를 내림차순으로 지정한다.

AddType application/x-httpd-php3 .php3
AddType application/x-httpd-php3-source .phps
AddType application/x-tar .tgz

AddType은 mime.types의 실제 편집없이도 mime을 설정할 수 있다.

AddHandler cgi-script .cgi

AddHandler는 파일확장자를 처리기(Handler)에 매핑(연결)시켜주게 된다.

AddType text/html .shtml
AddHandler server-parsed .shtml

SSI(Server Side Include)문서를 인식하게 하기위한 설정이다. SSI코드가
들어가 있는 문서는 확장자가 *.shtml이다. 시스템의 날짜와 카운터등
CGI프로그램을 하지 않아도 HTML문서에서 단 몇줄로 CGI의 효과를 낼 수
있는 SSI기능을 인식하게끔 하는 설정이다. "7장. 아파치와 SSI"편에서 자세히
설명되어 있다.


#Format: Action media/type /cgi-script/location
#Format: Action handler-name /cgi-script/location

Action은 매칭되는 파일이 호출될때마다 스크립트를 실행시킬 수 있도록
미디어 타입을 정의한다.

MetaDir .web

MetaDir은 아파치가 찾을 메타정보파일들의 디렉토리이름을 지정한다. 이
파일들은 문서를 전송할 때 포함되는 HTTP 헤더정보가 포함되어 있다.

MetaSuffix .meta

MetaSuffix는 메타정보를 포함하고 있는 접미어의 이름을 지정한다.


에러발생시 응답을 정의할 수 있는 방법을 3가지 나타내고 있다.

1) 일반적인 텍스트

Errordocument 500 "The server made a boo boo.

2) 지역적인 방향전환

Errordocument 404 /missing.html
Errordocument 404 /cgi-bin/missing_handler.pl

3) 외부 방향전환

Errordocument 402
http://some.other_server.com/subscription_info.html


다음의 BrowserMatch는 keepalives기능을 쓰지못하게 하며 HTTP
헤드방식을 설정한다.

BrowserMatch "Mozilla/2" nokeepalive

이 설정은 Netscape 2.x 또는 이를 따르는 브라우즈에 대하여 KeepAlive
기능을 쓰지 못하게한다.

BrowserMatch "MSIE 4.0b2;" nokeepalive downgrade-1.0
force-response-1.0

이 설정은 잘못구현된 HTTP/1.1과 301또는 302반응에 대하여
KeepAlive를 적절히 제공하지 못하는 마이크로소프트 인터넷익스플로러
4.0b2d에 관한 것이다.

BrowserMatch "RealPlayer 4.0" force-response-1.0
BrowserMatch "Java/1.0" force-response-1.0
BrowserMatch "JDK/1.0" force-response-1.0

위의 3가지 설정은 기본적인 1.1반응도 처리하지 못하며 HTTP/1.0 스팩을
제한하고 있는 브라우즈에 대하여 HTTP/1.1반응을 하지 못하게 한 것이다.

<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from www.manualand.co.kr
</Location>

서버의 상태를 점검할 수 있게하는 설정이다. 이는
"http://www.manualand.co.kr/server-status"와 같은 형식으로 서버의 상태를
점검할 수 있다. "6장. 아파치서버 모니터링"편에서 자세히 설명되어 있다.
여기서 지정한 "SetHandler server-status"의 설정으로 인해 서버
모니터링을 할 수 있는 것이다.

<Location /server-info>
SetHandler server-info
Order deny,allow
Deny from all
Allow from www.manualand.co.kr
</Location>

이설정을 위해서는 mod_info.c가 적재되어야 하며, 이는
"http://www.manualand.co.kr/server-info"와 같은 방식으로 서버의 정보를
볼 수 있다. 위에서 설정한 server-status와 함께 실행중인 웹서버의
상태점검을 위한 것이다.

<Location /cgi-bin/phf*>
Deny from all
Errordocument 403 http://phf.apache.org/phf_abuse_log.cgi
</Location>

아파치 1.1이전 버전의 오래된 버그에 대한 악용이 있을시에는 지정한곳
(http://phf.apache.org/phf_abuse_log.cgi) 으로 방향을 전환시킨다.


<IfModule mod_proxy.c>
ProxyRequests On

아파치 웹서버를 Proxy서버로 사용할 때 on을 해줘야 한다. 즉
프락시서버 지시자로서 프락시서버를 on 시킨다.

<Directory proxy:*>
Order deny,allow
Deny from all
Allow from .your_domain.com
</Directory>

ProxyVia On

HTTP/1.1 "Via:"헤드처리를 활성화시킬 것인지 비활성화 시킬것인지를
지정한다. Off, On, Full, Block중 하나가 올 수 있으며 Full은 서버버전을
포함하며, Block은 나가는 모든 것에 대해 Via:헤더를 제거한다.

CacheRoot "/usr/local/apache/proxy"
CacheSize 5
CacheGcInterval 4
CacheMaxExpire 24
CacheLastModifiedFactor 0.1
CacheDefaultExpire 1
NoCache a_domain.com another_domain.edu joes.garage_sale.com

이 설정은 캐시기능을 활성화 하기 위한 것이다.

### Section 3: 가상호스트 설정

여러분의 시스템에서 여러개의 도메인이나 호스트네임을 설정하여
관리하고자 한다면 <VirtualHost>부분을 설정해 줘야 한다. 가상호스트에
대한 정보는 http://www.apache.org/docs/vhosts/를 참조해 보면 좀더
자세한 정보를 얻을 수 있다. '-S'옵션을 사용함으로써 가상호스트의 설정에
대한 점검을 할 수 있다. name-based 가상호스트를 사용하길 원한다면
적어도 한 개이상의 IP Address를 정의할 필요가 있다. "4-2절의 내용"과
"10장.웹호스팅 서비스를 위한 가상호스트"편에서 자세히 설명되어 있다.

NameVirtualHost 12.34.56.78:80
NameVirtualHost 12.34.56.78

<VirtualHost www.manualand.co.kr>
ServerAdmin webmaster@manualand.co.kr
documentRoot /home/sspark/public_html
ServerName www.manualand.co.kr
ErrorLog /home/sspark/public_html/aw/error_log
CustomLog /home/sspark/public_html/aw/access_log common
</VirtualHost>

ServerAdmin은 해당서버의 관리자 전자우편이며,
DocumemtRoot는 해당서버의 홈디렉토리이며,
ServerName은 해당서버의 도메인이며,
ErrorLog는 해당서버의 에러파일 위치이며
CustomLog는 로그파일위치와 포맷을 지정한 것이다.

<VirtualHost _default_:*>
</VirtualHost>

Default 가상호스트 설정으로 위에서 설정되지 않은 다른 모든 호스트에
대해서 응답을 하고자 할 경우설정해 준다.

 

출처 : http://blog.daum.net/skj5432/4636075

APM Tomcat 포함 - 참고 작업용
Apache 2.0.48 + tomcat5.0.14 + PHP 5.0.0 + SSL + PERL
 
△ APM | 2004-05-07 12:07:40     
 
작성자 : 신현진 님

 
설치전 준비물
J2SE
Apache
Tomcat
Tomcat-Connector(mod_jk2)
mod_perl
openssl
PHP
zlib
/dev/random
libxml
이외에도 GNUtar, libtool, autoconf, automake 등이 없다면 다운로드 받으시기 바랍니다.
설치에 필요한 파일 다운로드 사이트
 
J2SE
1.4.2-b28 j2sdk-1_4_2-nb-3_5_1-bin-sol-sparc.bin http://java.sun.com/j2se/

apache
2.0.48 httpd-2.0.48.tar.gz http://httpd.apache.org/

tomcat
5.0.14 Alpha jakarta-tomcat-5.0.14.tar.gz http://jakarta.apache.org/site/binindex.cgi

tomcat-connectors
jk2-2.0.2
(mod_jk2 2.0.2) jakarta-tomcat-connectors-jk2.0.2-solaris8-apache2.0.43.tar.gz http://jakarta.apache.org/builds/

mod_perl
1.99_11 mod_perl-2.0-current.tar.gz http://perl.apache.org/

openssl
0.9.7c openssl-0.9.7c.tar.gz http://www.openssl.org/

PHP
5.0.0. Beta2 php-5.0.0b2.tar.gz http://www.php.net/

zlib
1.1.4 zlib-1.1.4.tar.gz http://www.gzip.org/zlib/

/dev/random
0.7
Solaris 8 ANDIrand-0.7-5.8-sparc-1.pkg http://www.cosy.sbg.ac.at/~andi/SUNrand/

libxml
2.6.1 libxml2-2.6.1.tar.gz http://xmlsoft.org/
위 사이트의 주소가 틀릴수도 있습니다.
대부분은 http://sunfreeware.com/ 에 가시면 다운로드 받을 수 있습니다. 참고하세요.
 
설치 중 에러가 나는 경우는 필요한 프로그램이 없는 경우 또는 버전이 맞지 않아서 일수도 있으며,
환경변수가 잡혀 있지 않거나, 퍼미션 설정이 잘 못 되었거나, 오타일 가능성을 살펴 봅니다.
에러 메시지를 잘 보시고 대처하시기 바랍니다.
 
 
 
 
 
J2SE Install
telnet console에서 인스톨하고자 하시는 분은 -console 혹은 -silent 옵션을 이용하세요.
# chmod 755 j2sdk-1_4_2-nb-3_5_1-bin-sol-sparc.bin
# ./j2sdk-1_4_2-nb-3_5_1-bin-sol-sparc.bin

저는 인스톨을 /usr/local/java 디렉토리에 하고, 패스를 잡아주었습니다.
설치후 버전을 확인하세요.
# cd /usr/local/java/bin
#./java -version
 
 
 
openssl 설치
# cd /tmp
# tar zxvf openssl-0.9.7c.tar.gz
# cd openssl-0.9.7c/
# ./config --prefix=/www/openssl
# make
# make install
 
 
 
zlib 설치
# cd /tmp/
# tar zxvf zlib-1.1.4.tar.gz
# cd zlib-1.1.4/
# ./configure --prefix=/www/zlib
# make
# mkdir -p "/www/zlib/include" "/www/zlib/lib"
# make install
 
 
 
/dev/random 설치
# su -
# umask 022
# pkgadd -d ANDIrand-0.7-5.8-sparc-1.pkg
 
 
 
apache 설치
# cd /tmp # tar zxvf httpd-2.0.48.tar.gz
# cd httpd-2.0.48/
# ./configure --prefix=/www/httpd --with-mpm=prefork --enable-ssl?--with-ssl=/www/openssl
--enable-deflate --with-z=/www/zlib --enable-dav --enable-dav-fs --enable-auth-digest --enable-info
--enable-rewrite --enable-vhost-alias --enable-expires --enable-mime-magic
# make
# make install

아파치의 conf/httpd.conf 파일 수정
# cd /www/httpd/conf
# vi ./httpd.confe Servername localhost:80 (여기 localhost는 자신의 도메인에 맞게 수정)
User nobody 라인 밑에 한줄 추가
-> Group nobody
# Group #-1
AddDefaultCharSet EUC-KR 로 수정
아파치가 제대로 작동하는지 확인합니다.
# cd /www/apache/bin
# ./apachectl start
#
# telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
HEAD / HTTP/1.0
HTTP/1.1 200 OK
Date: Thu, 13 Nov 2003 02:37:16 GMT
Server: Apache/2.0.48 (Unix) mod_ssl/2.0.48 OpenSSL/0.9.7c DAV/2
Accept-Ranges: bytes
Vary: Accept-Encoding
Connection: close
Content-Type: text/html; charset=EUC-KR
Connection closed by foreign host.
#
 
 
 
libxml 설치
# cd /tmp/
# tar zxvf libxml2-2.6.1.tar.gz
# cd libxml2-2.6.1/
# ./configure --prefix=/www/libxml
# make
# make install
 
 
 
PHP 설치
# cd /tmp/
# tar zxvf php-5.0.0b2.tar.gz
# cd php-5.0.0b2/
주의) --without-gd : gd 라이브러리를 사용하지 않도록 하는 옵션.
Solaris의 경우 gd 라이브러리가 설치되어 있지 않거나 설치되어 있다고 해도 자꾸 에러가 나서 저 옵션을 사용했습니다.
LINUX에서는 사용하지 않아도 에러 없이 컴파일 할 수 있습니다
# ./configure --prefix=/www/httpd/php --with-mysql=/usr/local/mysql
--with-apxs2=/www/httpd/bin/apxs --with-exec-dir=/www/httpd/php/bin
--enable-track-vars --with-config-file-path=/www/httpd/conf
--with-libxml-dir=/www/libxml --with-mod-charset --with-language=korean
--with-charset=euc_kr --enable-versioning --without-gd2
# make
# make install
# cp php.ini-dist /www/httpd/php/lib/php.ini
 
/www/httpd/conf/httpd.conf 를 vi로 열어 아래 부분을 추가합니다.
LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

아파치를 실행시켜 PHP와 연동이 되었는지 확인합니다
# cd /www/apache/bin
# ./apachectl restart
#
# telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
HEAD / HTTP/1.0
HTTP/1.1 200 OK
Date: Thu, 13 Nov 2003 03:37:45 GMT
Server: Apache/2.0.48 (Unix) mod_ssl/2.0.48 OpenSSL/0.9.7c DAV/2 PHP/5.0.0b2
Accept-Ranges: bytes
Vary: Accept-Encoding
Connection: close
Content-Type: text/html; charset=EUC-KR
Connection closed by foreign host.
#
 
 
 
mod_jk2 연동(복사)
이 부분에서 저는 소스를 컴파일 하지 않고 이미 솔라리스용으로 만들어진 so 파일을 이용했습니다
아파치 2.0.43용으로 만들어 졌지만 이번 설치에 사용한 2.0.47과도 호환이 됩니다.
소스컴파일보다 훨씬 쉽게 아파치-톰캣 연동 완료
# cd /tmp/
# tar zxvf jakarta-tomcat-connectors-jk2.0.2-solaris8-apache2.0.43.tar.gz
# cd jakarta-tomcat-connectors-jk2.0.2-solaris8-apache2.0.43/
# cp mod_jk2-2.0.43.so /www/httpd/modules/
 
 
 
tomcat 설치
# cd /www
# tar zxvf jakarta-tomcat-5.0.7.tar.gz
# mv jakarta-tomcat-5.0.7/ tomcat/
 
 

tomcat 환경설정
1./www/tomcat/conf/server.xml 을 아래와 같이 설정
<Server port="8005" shutdown="SHUTDOWN" debug="0">
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" debug="0"/>
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" debug="0"/>
<GlobalNamingResources>
<Environment name="simpleValue" type="java.lang.Integer" value="30"/>
<Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved">
</Resource>
<ResourceParams name="UserDatabase">
<parameter>
<name>factory</name>
<value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
</parameter>
<parameter>
<name>pathname</name>
<value>conf/tomcat-users.xml</value>
</parameter>
</ResourceParams>
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8009" enableLookups="false" redirectPort="8443" debug="0" protocol="AJP/1.3" />
<Engine name="Catalina" defaultHost="localhost" debug="0">
<Logger className="org.apache.catalina.logger.FileLogger" prefix="catalina_log." suffix=".txt"
timestamp="true"/>
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" debug="0" resourceName="UserDatabase"/>
<Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Logger className="org.apache.catalina.logger.FileLogger"
directory="logs" prefix="localhost_log." suffix=".txt" timestamp="true"/>
</Host>
</Engine>
</Service>
</Server>
 

2.conf/jk2.properties 에 한줄만 있으면 됩니다.
# cat /www/tomcat/conf/jk2.properties
channelSocket.port=8009
 
 
3./www/httpd/conf/workers2.properties 파일이 없으므로 아래를 복사하여 만듭니다
# cat /www/httpd/conf/workers2.properties
[channel.socket:localhost:8009]
info=Ajp13 forwarding over socket
tomcatId=localhost:8009
[uri:/tomcat-docs/*]
[uri:/jsp-examples/*]
[uri:/servlets-examples/*]
[shm:]
disabled=1
 
 
4./www/httpd/conf/httpd.conf 파일에 다음 한줄을 추가합니다
mod_jk2 를 Load 하도록...(물론 mod_jk2-2.0.43.so 파일을 mod_jk2.so 로 이름을 바꾸어 사용해도 된다.)
LoadModule jk2_module modules/mod_jk2.0.43.so

5. 디렉토리 퍼미션을 적절하게 조정해 준다.이외에 다른 디렉토리 퍼미션도 조정할 필요가 있으면 한다.
# cd /www/tomcat/
# chown -R tomcat:user logs/ work/
 
 
tomcat 과 아파치를 실행해서 연동이 되었는지 확인해 봅니다.
# su - tomcat
# cd /www/tomcat/bin
# ./catalina.sh start
# su -
# cd /www/apache/bin
# ./apachectl start

# telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
HEAD / HTTP/1.0
HTTP/1.1 200 OK
Date: Thu, 13 Nov 2003 02:43:29 GMT
Server: Apache/2.0.48 (Unix) mod_ssl/2.0.48 OpenSSL/0.9.7c DAV/2 PHP/5.0.0b2 mod_jk2/2.0.2
Accept-Ranges: bytes
Vary: Accept-Encoding
Connection: close
Content-Type: text/html; charset=EUC-KR
Connection closed by foreign host.
#

적절히 연동이 되었는지 아래 주소로 확인해 봅니다
doc :
http://localhost/tomcat-docs/
 
서비스를 멈춥니다
# su -
# cd /www/apache/bin
# ./apachectl stop
# su - tomcat
# cd /www/tomcat/bin
# ./catalina.sh stop
 
 
 
 
mod_perl 설치
# cd /tmp/
# tar zxvf mod_perl-2.0-current.tar.gz
# cd mod_perl-1.99_09/
# perl Makefile.PL MP_AP_PREFIX=/www/httpd MP_INST_APACHE2=1
# make
# make install

conf/httpd.conf 를 수정하여 아파치 시작시 모듈이 올라오도록 수정합니다
LoadModule perl_module modules/mod_perl.so
아파치를 실행시켜 mod_perl 과 Perl 버전이 뜨는지 확인합니다
# cd /www/apache/bin
# ./apachectl restart
#
# telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
HEAD / HTTP/1.0
HTTP/1.1 200 OK
Date: Thu, 13 Nov 2003 02:45:52 GMT
Server: Apache/2.0.48 (Unix) mod_perl/1.99_09 Perl/v5.8.0 mod_ssl/2.0.48 OpenSSL/0.9.7c DAV/2 PHP/5.0.0b2 mod_jk2/2.0.2
Accept-Ranges: bytes
Vary: Accept-Encoding
Connection: close
Content-Type: text/html; charset=EUC-KR
Connection closed by foreign host.
#
 
 
 
SSL 설치 및 가동
# cd /www/openssl/bin
Random State생성
# openssl sha1 * > rand.dat or
cat file1 file2 file3 > rand.dat or
생성하지 않아도 됨
 
개인키 생성.
# openssl genrsa -rand rand.dat -des 1024 > key.pem
키를 생성하기위해서 rand.dat를 난수생성을 위해 로드하고, DES로 암호화하여 1024bit 의 RSA 알고리즘을 사용하여 생성된 결과값을 파일 key.pem에 출력합니다.
# openssl genrsa -rand rand.dat -des3 1024 > key.pem
( triple DES로 개인키를 암호화하길 원할 경우)
주의:passphase를 기억해야 합니다.Apache-SSL서버 시작시 passphase가 반드시 필요하기 때문입니다.
 
CSR 생성
#>openssl req -new -key key.pem -out csr.pem
인증서버에 보낼 파일을 생성했다.
위에서 생성한 전자서명키와 다음에 입력할 DN(distinguish name) 정보를 가지고 인증요청정보(CSR.PEM)을 생성합니다
1. C (country : 국가) 에 해당하는 값을 입력합니다.
(예) KR : Korea (mandatory)
2. ST (state : 지방) 에 해당하는 값을 입력합니다
(예) New South Wales = NSW
3. L (locality : ) 에 해당하는 값 (city, town 등) 을 입력합니다.
4. DN 에 해당하는 O(organization) 의 이름을 기입합니다. 이 NAME은 도메인 NAME의 일부로 사용하게 됩니다..
예) KICA : Korea Information Certificate Authority (mandatory)
5. DN에 해당하는 회사이름 OU(organization unit)을 입력합니다.
(예) KR, Dacom 등
6. Web Server의 FULL 도메인 name 또는 IP를 입력합니다.. 이것은 당신이 차후 사용하게 될 web site 의 https URL로 사용할 수 있도록 합니다.
(예) www. Bookstore.com or 128.134.254.166
7.남은 attribute 부분은 생략해도 됩니다.
8.위 과정을 거치면 다음과 같은 csr.pem 형식의 web server 인증요청 정보가 나오게 됩니다.
 

CSR 보기
# cat csr.pem
-----BEGIN CERTIFICATE REQUEST-----
MIIB3zCCAUgCAQAwgZ4xCzAJBgNVBAYTAktSMQ4wDAYDVQQIEwVTZW91bDEfMB0G
A1UEBxMWam9vbmdyaW0tZG9uZyxjaHVuZy1ndTENMAsGA1UEChMES0lDQTEUMBIG
A1UECxMLbGljZW5zZWRXZWIxFzAVBgNVBAMTDnd3dy5zaWducmEuY29tMSAwHgYJ
KoZIhvcNAQkBFhFraWNhQHNpZ25nYXRlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOB
jQAwgYkCgYEAwV7RJqGC9M0OGEiCRsszrXNa2uu1tJ+oqtIbmG5lzyLcpYPV0JOb
o6vQq27RP2EbEHoUNLL92oWNlKwo/kkUoR9r3TvjhZ221uFoGjBt/LSwn9ui3nY+
Ntef90l24ltNpc7eHPNnvTdWLWWmkO9EImJ90soc0VTqwSORfxGd4KVqzH17U5yQ
/m3W
-----END CERTIFICATE REQUEST-----

이 pem 형식의 인증요청정보(CSR)를 복사하여 웹서버 인증 발급요청에서 인증서 요청 정보란에cut & paste후 나머지 정보를 입력한 뒤 인증서 발급 요청을 하면 됩니다.
http://www.crosscert.com 에서 테스트 인증서를 받을 수 있습니다
 

인증서 설치
1. SSL 인증서 설정( SSLCertificateFile )
공인인증기관으로부터 cut&paste한 PEM 형식의 인증서를 웹서버에 파일로 저장한다. (인증서를 /www/httpd/conf 에 파일로 저장한 경우)
#vi httpd.conf
#Point SSLCertificateFile at a PEM encoded certificate.
# If the certificate is encrypted, then you will be prompted for a pass phrase.
# Note that a kill -1 will prompt again.
# A test certificate can be generated with "make certificate".
SSLCertificateFile /www/httpd/conf/cert.pem

2. SSL 전자서명 생성키 설정( SSLCertificateKeyFile )
# 개인키 생성시 생성했던 전저서명생성키를 설정하는 것으로 절대패스를 지정해주어야 하고 만약 암호화되어 있다면 웹서버 기동시 암호를 입력을 요구한다.

#vi httpd.conf
# If the key is not combined with the certificate, use this directive to
# point at the key file. If this starts with a '/' it specifies an absolute
# path, otherwise it is relative to the default certificate area. That is, it
# means "/private/".
SSLCertificateKeyFile /www/httpd/conf/key.pem
 
 
SSL 설치 완료 & 웹서버 시작
# cd /www/httpd/bin
# ./apachectl start ssl
Apache/2.0.48 mod_ssl/2.0.48 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide us with the pass phrases.
Server localhost:443 (RSA)
Enter pass phrase: (password 입력)
Ok: Pass Phrase Dialog successful.
 

이 문서에 대한 책임은 지지 않습니다.
저처럼 1주일씩 삽질하시는 분들을 위해 만들어 보았습니다.
참고로 이 자료는 http://www.parupunte.com/minaken/apache2/httpdtomcat507modjk2.html 사이트의
자료를 토대로 작성 했습니다


출처 : http://blog.empas.com/firstall/read.html?a=10728285

<-

Microsoft Windows에서 아파치 사용법

가능한 언어:  en |  ko

이 문서는 최신판 번역이 아닙니다. 최근에 변경된 내용은 영어 문서를 참고하세요.

이 문서는 Microsoft Windows에서 아파치 2.0을 설치, 설정, 실행하는 방법을 설명한다. 잘못된 부분이 있거나 다른 방법으로 도움을 주려면, 버그 보고 페이지를 사용하길 바란다.

이 문서는 아파치 바이너리 배포본을 설치한다고 가정한다. (아마도 개발 혹은 버그를 찾기위해) 직접 아파치를 컴파일하려면 Microsoft Windows용 아파치 컴파일을 참고하라.

현재 Microsoft Windows 운영체제군의 버전 정책상 이 문서는 다음과 같이 구분한다:

  • Windows NT: Windows NT 커널을 기반으로 하는 모든 Windows 버전을 의미한다. Windows NT, Windows 2000, Windows XP, Windows .Net Server 2003을 지칭한다.
  • Windows 9x: 소비자 중심의 오래된 Windows 버전을 뜻한다. Windows 95 (OSR2 포함), Windows 98, Windows ME를 지칭한다.
top

운영체제 요구조건

아파치 2.0을 실행하기위한 기본 Windows 플래폼은 Windows NT이다. 바이너리 설치프로그램은 Intel과 AMD와 같은 x86 개열 프로세서에서만 동작한다. 아파치는 Windows 9x에서 충분히 검사하지 않았기때문에 절대로 실제 서비스에 사용하지 않길 바란다.

운영체제에 설치한 TCP/IP 네트워크가 동작해야 한다. Windows 95에서 실행한다면, Winsock 2 업그레이드를 설치해야 한다. Windows 95용 Winsock 2는 여기에서 다운받을 수 있다.

Windows NT 4.0을 사용한다면 서비스팩 4의 TCP/IP 문제와 Winsock 문제가 다음 서비스팩에서 해결되었기때문에, 서비스팩 6을 설치하길 적극 권한다.

top

Windows용 아파치 다운로드

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

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

top

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 Files\Apache Group이고, 이곳에 Apache2라는 디렉토리를 만든다.

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

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

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

top

Windows용 아파치 설정하기

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

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

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

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

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

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

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

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

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

    LoadModule status_module modules/mod_status.so

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

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

  • CGI 스크립트를 사용한다면 ScriptInterpreterSource 지시어를 사용하여 아파치가 스크립트의 인터프리터를 찾는 방법을 설정할 수 있다.

  • Windows에서 .htaccess와 같은 파일명을 다루기 힘드므로, AccessFilename 지시어를 사용하여 디렉토리별 설정파일 이름을 변경하면 편하다.

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

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

아파치를 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:\files\my.conf"

-k install 외에 다른 파라미터를 사용하지 않으면, service 이름은 Apache2가 되고 설정파일은 conf\httpd.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를 관리할 수 있다.

top

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

일반적으로 아파치를 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 pidkill -USR1 pid의 Windows판이다. 명령행 옵션 -k는 유닉스 kill 명령어 이름을 본따 지었다.

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

c:
cd "\Program Files\Apache Group\Apache2\bin"
apache

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

cd ..\logs
more < error.log

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

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

    apache -f "c:\my server files\anotherconfig.conf"

    혹은

    apache -f files\anotherconfig.conf

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

    apache -n "MyServiceName"

두 경우 모두 설정파일이 적절한 ServerRoot를 지정해야 한다.

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

apache -V

아파치는 다음 순서대로 ServerRoot를 찾는다:

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

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

HKEY_LOCAL_MACHINE\SOFTWARE\Apache Group\Apache\2.0.43

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

HKEY_CURRENT_USER\SOFTWARE\Apache Group\Apache\2.0.43

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

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

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

top

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

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

http://localhost/

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

http://127.0.0.1/

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

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

가능한 언어:  en |  ko

Tag // apache

Windows APM 설치가이드



설치할 소스
apache_2.0.48-win32-x86-no_ssl.msi (http://httpd.apache.org/download.cgi)

php-4.3.11-Win32.zip (http://www.php.net/downloads.php)
mysql-4.0.24
-win32.zip (http://dev.mysql.com/downloads/)
ZendOptimizer_2.5.0 (
http://www.zend.com/store/free_download.php)


윈도우 XP에서 APM 설치방법입니다.

NT 계열은 여기서 디렉토리 이름이나 경로만 조금씩 바꿔주면 됩니다.

반드시 지정한 버전의 파일만 다운 받으시기 바랍니다. 타버전은 연동 안될 수 있습니다.

APM을 설치하면서 한줄씩 써내려갔기 때문에 확실합니다. 이대로만 따라하시면 됩니다.

▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧


1. mysql 설치

유닉스 계열과는 달리 윈도우에서는 mySQL 설치가 아주 간단하다. next만 클릭하면 된다. :)

dev.mysql.com/downloads/ 에 접속하면 프로그램을 다운받을 수 있다.

어떤 사람들은 모든게 영어로 되어있어서 한글사이트를 찾곤 하는데 그러지 말길 바란다.

프로그램 관련 기술을 배우기 위해서는 영어와 친해져야 한다. 언제고 뼈져리게 느끼게 된다.


먼저 프로그램을 다운 받는다. 인스톨러가 포함된 Window버전으로 받아야 한다.

4.0.08버전이나 4.0.24버전 이어야 한다. 서브쿼리를 지원하는 4.1.11 버전은 왠일인지 연동이 되지 않았다.

원인을 찾다가 그만두었다. (매사가 그렇겠지만 새로운걸 접하면 반드시 삽질은 따르기 마련인 것 같다.)

혹 4.1.x 버전에 APM을 연동하신 분이 계신다면 저에게 연락을.. ;-)


다운받은 mysql-4.0.24-win32.zip 파일을 압축을 풀고 SETUP.EXE를 더블클릭한다.

그리고는 무조건 next... 설치가 완료되면 c:/mysql 디렉토리에 설치가 된 것을 확인할 수 있다.

c:/mysql/bin 디렉토리로 이동하여 winmysqladmin.exe을 더블클릭 해준다.

어떤 창이 잠시동안 떴다가 사라지면서 오른쪽 시스템 트레이 아이콘 부분에서 신호등 모양의 아이콘을 발견할 수 가 있을 것이다.

이것이 mysql 데몬을 관리하는 툴이다. 클릭한번으로 데몬을 띄우고 죽이고 할 수가 있다.


여기서 잠깐.. 앞으로 mysql을 편하게 관리하기 위해서 이쯤에서 mysql PATH를 잡아준다.

시작 -> 제어판 -> 시스템에 이동한 후 고급탭을 클릭해보면 밑부분에 환경변수라는게 보일 것이다.

환경변수를 클릭하면 사용자변수와 시스템 변수 두 개 영역으로 나뉘어 있는데 시스템 변수의 Path 부분을 더블클릭하고

맨 뒷부분에 ;C:\mysql\bin 을 추가해준다.

다 끝마쳤으면 윈도우 커맨드창을 띄우서 mysql -u root 라고 때려보자.


C:\Documents and Settings\송윤경>mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3 to server version: 4.0.24-nt

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>


위와같이 접속이 된다면 성공한것이다.

mysql 계정추가 방법이나 DB 추가 등등은 여기서 설명하지 않겠다.

참고로 루트의 비번변경 쿼리는 이렇게 하면 된다.

mysql> update user set password=password('원하는비밀번호') where user='root';


2. php 설정

php는 인스톨 파일이 아닌 바이너리 파일을 다운 받는다.

www.php.net/downloads.php 로 이동하여 Windows Binary 라고 되어 있는 부분을 찾는다.

여기서 Installer 가 아닌 ZIP PACKAGE를 받아야 한다.

php-4.3.11-Win32.zip을 다운받고 압축을 풀면 php-4.3.11-Win32 라는 디렉토리를 볼 수 있다.

관리를 편하게 하기 위하여 이 디렉토리 이름을 php로 변경해 준뒤 C:\에 폴더 통채로 옮긴다.


INSTALLER 파일이 아니기 떄문에 따로 설치할 필요는 없다. 이제 몇가지 설정만 해주면 된다.

C:/php 로 이동해서 php.ini-dist 파일이름을 php.ini로 변경한다.

그리고 메모장으로 이 파일을 연 다음

error_reporting  =  E_ALL & ~E_NOTICE

display_errors = On

register_globals = On   // <- 중요

위 문구들과 비스무레한 곳을 찾는다.
만일 error_reporting = E_ALL 로 되어있으면 위와같이 수정해주고
display_errors = Off 로 되어있으면 위와같이 On으로 수정해야 한다.
(Off 로 되어있으면 코딩하다가 오류가 나더라도 브라우저에서 인식을 못함)
4.3.11 버전에서는 제대로 되어있을 것이다. (PHP5는 반드시 이 과정을 거쳐야 함)

register_globals 는 4.x 버전(정확히는 기억 안남 ;-) 부터는 다 Off로 되어있다. Get/Post의 보안의 이유로 이렇게 바뀌었는데
이대로 놔두면 지금까지 코딩한 수많은 프로그램들의 수정이 불가피 하고 앞으로 작업할떄도 불편하다.
반드시
register_globals = On 으로 설정하기 바란다.

이제 메모장을 닫고 php.ini 파일을 C:/Windows로 카피한다. C:/php/php.ini 는 지워도 되고 그냥 둬도 상관없다.
그 다음에는 C:/php/php4ts.dll 파일을 C:/Windows/system32 폴더에 카피한다.

3. Apache 설치

httpd.apache.org/download.cgi 에 접속하면 아파치를 다운 받을 수 있다.

win32용 apache_2.0.48-win32-x86-no_ssl.msi 파일을 다운 받기 바란다.
다른 버전 혹은 다른 종류의 파일을 다운 받고 설치가 안된다고 하지 마시길.. ;-)

다운받은 파일을 더블클릭하고 next를 클릭하다보면 설치 디렉토리를 변경할 수 있는 곳을 만나게 된다.
Changes...를 클릭하고 C:\ 로 변경하자 그리고는 또 next -> install.. 인스톨이 끝났으면 finish 버튼을 클릭하고
컴퓨터의 오른쪽 하단 시스템 트레이 아이콘 부분을 보자 아파치의 상징인 깃털을 볼 수가 있을 것이다.
이것이 바로 아파치 데몬 관리 툴이다.

이제 php를 Apache에 심기 위해 환경설정을 해줄 차례이다.

C:/Apache2/conf/httpd.conf 파일을 메모장으로 열고 맨 밑부분에 다음과 같이 기입힌다.

LoadModule php4_module "c:/php/sapi/php4apache2.dll"
AddType application/x-httpd-php .php .html .htm .php3 .inc .phtml

그 다음은 DocumentRoot 부분을 찾아서 웹루트 디렉토리를 설정한다.
본인은 D:/My_Project로 하였다. (C:/Apache2/htdocs를 그대로 사용할거라면 그냥 놔두면 됨)

DocumentRoot "D:/My_Project"

여기까지 설정하였다면 다 끝난 것과 다름없다. 요 밑에 세줄은 해도 되고 안해되 된다.(옴션임)

ServerName localhost <- 서버 이름(본인에 맞게 기입)
DirectoryIndex index.html index.html.var index.php <- 시작페이지에 index.php에 추가
AddDefaultCharset euc-kr <- 한글 깨짐 방지

다 끝났으면 아파치 데몬을 리스타트 해준다.

시작->모든프로그램->Apache HTTP Server 2.0.48->Control Apache Server->Restart


이제 APM이 잘 연동되었는지 확인해보면 된다.

아파치 웹루트 디렉토리로 지정해준 곳으로 이동하여 그곳에 파일을 하나 만든다.

메모장으로 만들어도 되고 본인이 사용하는 에디터가 있다면 아무걸로나 만들면 되겠다.

<?

  mysql_connect('localhost','','');

  phpinfo();

?>

위와같이 코딩을 한후 파일 이름을 phpinfo.php로 저장하자. 반드시 본인이 지정한 웹루트 디렉토리에 저장하여야 한다.

이제 마지막 확인작업..

설레는 마음으로 브라우저를 띄우고 http://localhost/phpinfo.php 에 접속해보자.

(phpinfo.php 파일을 떠블클릭 하고는 에러난다고 하시는 분들 계시는데 그러지 마시길.. ㅡㅡ;)


아무 이상없이 php 정보가 죽~ 뜬다면 대성공이다.

성공한 화면을 잠시 감상한 후 마지막으로 Zend를 설치해주자.



4. Zend 설치

무료로 다운받기 위해서 www.zend.com/store/free_download.php 에 접속한다.

거기서 Windows 버전을 다운받는다.

다운받은 ZendOptimizer-2[1].5.0-Windows-i386.exe 파일을 떠블클릭한다.
next를 클릭하고 설치폴더를 C:\php\Zend 로 빠꾼다.
그다음 서버지정을 해야하는데 디폴트로 Apache로 되어있으므로 그냥 next..
그다음 아파치 설치 디렉토리 지정.. 이것역시 디폴트로 C:\Apache2로 되어있으므로 그냥 next..
마지막으로 php.ini 위치 지정.. 이것또한 디폴트로 C:\Windows\ 로 되어있다.

계속 설치해나가다 보면 경고창을 몇 번 만난다. php.ini를 백업한다느니.. 여하튼 그런 내용이다.
OK를 클릭하고 맨 마지막에 가서는 Apache 데몬은 Restart 할 수 없으니 수동으로 해주라는 경고창을 만난다.
시키는 데로 아파치 데몬을 Restart 해주자

이제 다 끝났다. 웹 브라우저에서 http://localhost/phpinfo.php 에 접속해보자(아까 만들었던 파일임)
phpinfo 함수에 의해 정보가 죽~ 뿌려져 있는데 그중 Zend Optimizer가 설치된 것을 확인 할 수 있을 것이다.

APM 연동에 실패했다면 다 지운뒤 처음부터 다시 해보길 바란다.
APM을 처음 설치하는 분이라면 사소한 부분에서 많은 에러를 접할 수 있다.
인내심을 가지고 하시길..


########################################
# 작성자 : 송윤경 (Nick : Leopit)
# Contact : webmaster@leopit.com
# Last Updated : 2005. 4. 8
#######################################

출처 : http://blog.naver.com/ehdus/80020205261

Tag // APM