====== 웹서버 구축하기 ======
현재 가장 많이 사용되어지고 있는 아파치(apache)를 이용해서 웹서버를 구축방법을 설명한다. 설치방법이 비교적 간단하기 때문에 환경설정부분을 비중있게 다룰 것이다.
====== 준비운동하기 ======
우선 아파치를받아야 한다. 아무데서나 다운받아도 되지만 그래도 아파치 미러링 사이트에서 받는 것이 좋다.
http://ftp.apache-kr.org/httpd/
아파치는 가장 최신버전을 다운받는다. 용량이 그리 크지 않기 때문에 금방 다운받을 수 있을 것이다. 참고로 현재 최신버전은 alpha 버전은 2.0.53 이고, stable 버전은 1.3.33 이다. 가끔가다, 이 두가지 버전에 혼동을 일으킬 때가 있다. 내가 알고 있는 것으로 설명하자면, 아래와 같다.
| 버전 | 설명 |
| alpha | 새로운 기능을 추가한 버전, 하지만 안정성은 떨어진다 |
| stable | 말 그대로 안정한 버전이다 하지만 신 기술을 추가하거나 그렇지 않다 |
목적에 맞게 다운 받았으면, 이제 본격적으로 설치에 들어가보자!!
====== 설치하기 ======
여기서는 단순히 아파치만을 설치하는 방법을 소개한다. PHP 등과 연동해서 설치를 원한다면, 이와 관련 문서를 참조하기 바란다.
#./configure
#make
#make install
설치 디렉토리는 기본적으로 /usr/local/apache 이다. 실행해보자!
#cd /usr/local/apache/bin
#./apachectl start
#ps -ax | grep httpd
제대로 실행이 되었는지 프로세스를 확인한다. 만일 제대로 시작이 되지 못했다면, httpd.conf 파일의 문법을 체크해본다.
#/usr/local/apache/bin/httpd -t
====== 설정파일 분석 ======
아파치에서는 httpd.conf 파일만 알고 있으면, 끝났다고 봐도 무방하다. 그만큼 중요한 파일이다. 이제부터 각각의 설정에 대해서 설명하도록 하겠다.
===== 전체 환경설정 (Global Environment) =====
==== ServerType standalone ====
| inetd | 오직 유닉스 플랫폼만지원, 웹서버 설정 변경시 웹서버를 리부팅 할 필요 없으나 새로운 프로세서를 만들 때 마다 설정 파일을 참고하므로 속도가 느림 |
| standalone | 웹서버 설정 변경시 반드시 웹서버를 다시 시작. 기본적으로 설정되는 방식 |
==== ServerRoot "/usr/local/apache" ====
서버의 설정 파일, 에러 파일, 로그 파일이 기록되는 디렉토리의 최상위 경로명
==== Timeout 300 ====
한번의 GET요청에 대한 타임아웃 시간을 정해주는 부분으로 초단위. 클라이언트가 요청 한 정보를 받을 때까지 소용되는 대기시간의 최대값
==== KeepAlive On ====
접속한 클라이언트의 요청을 처리한 후 연결을 계속 유지하고 있으면 클라이언트의 다음 요청에 대한 시간을 절약할 수 있다. 기본 On
==== MaxKeepAliveRequests 100 ====
하나의 지속적인 연결동안에 접속을 끊지 않고 몇 번까지 요청을 받을 것인지 설정
==== KeepAliveTimeout 15 ====
동일한 접속 상태에서 동일한 클라이언트로부터 다음 요청 동안에 기다리는 수치를 초로 표시. 표시한 시간동안 요청을 하지 않으면 접속을 끊어 버림
==== StartServers 5 ====
초기 시작시에 시작할 서버의 개수 즉 httpd 데몬을 처음 실행 시킬 때 여분의 프로세스를 생성시킬 수치를 지정. 지금 총 프로세스는 6개가 된다
==== MaxClients 150 ====
동시에 접속할 클라이언트의 최대 개수를 제한하는 값. 만약 이 값에 도달하면 클라이언트의 요청은 다른 요청이 끝날 때까지 대기 상태가 된다
==== MaxRequestsPerChild 0 ====
각 자식 프로세스가 죽기 전까지 처리할 수 있는 요청 개수
==== Listen 3000 ====
아파치를 기본값 이외에도 특정 IP 주소 또는 포트와 결합(bind)시키려 할 때 사용
==== BindAddress * ====
이 옵션을 사용하여 가상 호스트를 지원할 수 있다. *.IP주소, 또는 완전한 인터넷 도 메인 이름을 사용할 수 있다. 가상 호스트 서비스를 하려면 #를 삭제해 주어야 한다. *는 모든 주소에 대하여 가상 호스팅 기능
==== Dynamic Shared Object(DSO)Support ====
이 설정은 될 수 있으면 건들지 마세요..
==== ExtendedStatus On ====
"server-status" 처리기가 호출되었을 때 아파치가 "매우 자세한" 상태 정보를 생성시킬 것인지 (ExtendedStatus On) 아니면 매우 기본적인 정보만 생성시킬 것인지를 (ExtendedStatus Off)제어한다. 기본값은 Off 이다
===== 주 서버 설정 (Main server configuration) =====
이 섹션에 있는 지시자는 정의에 의해 처리되지 않는 모든 요청에 응답할 '주' 서버가 사용할 값을 정한다. 이 값들은 또한 이 파일 뒷 부분에서 정의할 모든 컨테이너의 기본값을 제공하기도 한다. 여기 나오는 모든 지시자는 컨테이너 안에서도 사용할 수 있으며 그 안에서 사용되면 해당 가상 호스트에 대하여 전체 기본값을 무시하고 새롭게 정한 값이 채 택된다. 만약 ServerType ('Global Environment' 섹션에서 설정)이 "inetd"인 경우, inetd 설정 내용을 따르기 때문에 다시 몇 가지 지시자는 아무런 효력을 발휘하지 않는다. ServerAdmin 지시자까지 그냥 건너뛴다.
==== Port 80 ====
독립실행형(standalone)서버가 요청을 기다리는 포트 즉 웹 서버의 포트 번호 1023보다 낮은 포트. 기본포트는 80번.
==== User nobody, Group nobody ====
웹을 통해 서버에 접근하는 사용자들의 권한을 부여하는 부분. root로 지정하면 안되며 기본적으로 nobody를 사용하거나 별도의 웹 서비스용 계정과 그룹을 만들어 지정.
==== ServerAdmin root@localhost.localdomain ====
서버에 문제가 발생했을 때 메일을 보낼 메일 주소. 서버에러시 내보내는 메시지에 함께 출력된다.
==== ServerName ip주소나 DNS 이름 ====
클라이언트 프로그램에게 돌려주는 서버 이름이 다른 경우 호스트 이름을 설정할 수 있게 해준다. (예를 들어, 호스트의 실제 이름이 아닌 'www'를 사용하도록 하는데 사용할 수 있다.) 주의: 호스트 이름을 아무렇게나 만들어선 안된다. 이 이름은 여러분의 여러분 서버에 주어진 DNS 이름이어야 한다. 호스트가 등록된 DNS 이름을 갖고 있지 않는 경우에는 이 곳에 IP 주소를 적는다. IP 주소를 사용하여(예를 들어 http://123.45.67.89/) 접속할 수 있다. 이런식으로 해서 리다이렉션이 작동하도록 할 수 있다. 예를 들어, 주석을 풀어주고 idplus.xwow.net 이라고 썼다.
==== DocumentRoot "/usr/local/apache/htdocs" ====
웹서버의 홈페이지 파일(HTML 문서들) 들이 위치할 제일 상위 디렉터리를 지정 하는 부분. 심볼릭 링크나 alias를 사용하여 다른 위치를 가리킬 수도 있다.
==== 디렉터리의 권한 ====
아파치 웹 서버에 접근하는 디렉터리의 권한을 설정. 디렉터리에 대한 일반적인 접근 권한을 설정
==== UserDir public_html ====
- 사용자의 디렉터리 명. 서버에 계정을 주었던 사용자들의 홈페이지 서비스를 위해서 각 계정의 디렉터리에 public_html 이란 디렉터리를 만들면 홈페이지 서비스가 가능
- http://IP주소나 도메인/~사용자 계정으로 접속
- 사용자 디렉터리 접근제어 : 일반 사용자의 디렉터리에 대한 접근제어를 설명
==== DirectoryIndex index.html index.php index.php3 index.cgi ====
URL을 쳤을 때 자동으로 불려지는 인덱스 파일 설정. 적은 순서에 따라 여러개의 인덱스 파일이 서비스가 가능하며 구분은 스페이스로 구분
==== AccessFileName .htaccess ====
디렉터리의 접근제어 정보 내용을 포함한 파일의 이름을 지정. 원하는 디렉터리 안에 .htaccess라는 확장자를 가진 파일을 넣어 접근제어를 가능하게 한다. .htaccess에는 인증 정보가 들어있는 경우가 빈번하므로 보안 상 이유로 이 파일에 대한 접근은 불허해야 한다. 웹 방문객들이 이 파일을 보게 하고 싶으면 다음 행들을 주석 처리하라. 만약 AccessFileName 설정을 다른 파일명으로 바꾸었다면 알맞게 .htaccess를 그 이름으로 바꾸어준다. 또한 사람들이 웹 서버 패스워드 파일을 .htpasswd라고하는 경향이 있기 때문에 .ht 로 시작하는 파일을 모두 보호한다.
==== CacheNegotiatedDocs ====
기본적으로 아파치는 내용에 따라 협상된 문서에 대해서는 "Pragma: no-cache" 내용을 전송한다. 이 행은 프록시 서버로 하여금 문서를 캐쉬하지 않도록 요청한다. 다음 행의 주석을 풀면 이 기능을 해제하고 모든 프록시가 문서를 캐쉬할 수 있도록 한다.
==== UseCanonicalName ====
(1.3 버전에 새롭게 등장) 이 설정을 켜두면, 아파치가 자기 참조 URL (반응이 오고 있는 서버를 다시 가리키는 URL)을 만들 필요가 있을 때마다 "공식적인" 이름을 만들기 위해 ServerName과 Port를 사용한다. 그렇지 않으면 아파치는 가능한 한 클라이언트가 제공한 호스트 이름:포트 값을 사용한다. 이 설정은 CGI 스크립트의SERVER_NAME, SERVER_PORT 에도 영향을 미친다.
==== TypesConfig ====
mime.types 파일 또는 이에 해당하는 파일을 찾을 위치를 결정한다.
==== DefaultType ====
파일 확장자와 같은 것을 통해 MIME 타입을 알 수 없는 문서에 대하여 사용할 기본 MIME 타입을 말한다. 여러분의 서버에 주로 텍스트나 HTML 문서가 많다면 "text/plain" 을 쓰는 것이 좋다. 대부분이 실행 프로그램이나 이미지 등 바이너리인 경우에는 웹 브라우져가 텍스트 라고 생각해 바이너리 파일을 화면에 표시하지 않도록 하기위해 "application/octet-stream" 를 적는다.
==== mod_mime_magic ====
파일의 내용을 가지고 파일의 타입에 힌트를 얻는다. MIMEMagicFile 지시자를 사용하여 모듈에게 힌트 정보가 저장되어 있는 파일을 설정한다.
==== HostNameLookups Off ====
클라이언트의 이름 또는 IP 주소만을 기록할 지 여부. 예를 들어 www.apache.org (on) 또는 204.62.129.132 (off) 기본값이 off 인 이유는 각 클라이언트 요청이 올 때마다 최소한 1 번 이상의 네임 서버 요청이 발생하기 때문이다. 그러나 꼭 필요한 경우에는 이 기능을 켜둔다. on을 시켜놓으면 상당한 서버의 성능저하를 보게 된다.
==== ErrorLog /usr/local/apache/logs/error_log ====
에러 기록 파일의 위치
==== LogLevel warn ====
error_log 에 기록될 메시지 분량을 제어한다. debug, info, notice, warn, error, crit, alert, emerg 등의 값이 가능하다.
====== 마치며 ======
httpd.conf 파일의 마지막 부분은 가상 호스트에 대한 설정부분이다. 이것에 대한 내용은 관련 문서와 중복되는 관계로 여기서 다루지 않았다. 문서를 참고하기 바란다.
----
{{indexmenu>:#1|skipns=/^(wiki|etc|diary|playground)$/ skipfile=/^(about|guestbook|todays)$/ }}
----