[웹서버] power by apache..

0. 역사

NCSA 1.3 에서 모태

1. APACHE related Site

? http://www.apache.org/

? http://www.apache.kr.net/

2. 지원 운영체제

리눅스등 유닉스 계열 (httpd)

Windows 95/98/NT/2000 등 Win 32 계열(apache.exe)

3. 기본 디렉토리

– conf

– htdocs

– logs

– cgi-bin

4. process 및 설치 방식

유닉스 : standalone에서 여러개의 복사본 프로세스를 띄움.

Win32 : 여러개의 Thread 를 가지는 하나의 process에서 처리.

CD 등 배포판에서 rpm 으로 배포 –>DSO 방식

일반적인 컴파일로 설치 –>Static 방식 (5% 정도 빠름)

  

5. httpd 의 옵션

[antihong@www10 antihong]$ /usr/sbin/httpd –h

-f file         : specify an alternate ServerConfigFile

-v              : show version number

-V              : show compile settings

-l              : list compiled-in modules

-t              : run syntax check for config files (with docroot check)

6. apache 실행 권한

초기에 root 권한으로 http 생성후 nobody 권한의 httpd가 fork됨.

root 소유의 프로세스는 80 번 포트로의 접속을 Listen하여 전체 nobody 의 프로세스

를   통제하며 새로운 데몬을 생성하거나 죽이는 역할을 한다.

7. 각종 지시자의 차이

<Directory> 또는 <DirectoryMatch>

<Files>  또는 <FilesMatch>

<Location> 또는 <LocationMatch>

BrowserMatch “WebZIP” go_out

BrowserMatch “Teleport” go_out

BrowserMatch “GetRight” go_out

<Directory />

  Options Includes ExecCGI FollowSymLinks

  AllowOverride All

  Order allow,deny

  Allow from all

  Deny from env=no_access

</Directory>  

<Files ~ “^\\.ht”>

  Order allow,deny

  Deny from all

</Files>      

<Location /server-status>

  SetHandler server-status

  Order deny,allow

  Deny from all

  Allow from .your_domain.com

</Location>

<IfModule mod_mime_magic.c>

  MIMEMagicFile conf/magic

</IfModule>          

–> mod_mime_magic.c 모듈이 정의되어 있으면 적용된다.

8. VirtualHost (가상 호스팅)

(1) Name Based Virtuals Host

NameVirtualHost 211.47.65.4

<VirtualHost www.abc.co.kr>

  ServerAdmin master at

abc.co.kr

  DocumentRoot /home/abc/public_html

  ServerName www.abc.co.kr

</VirtualHost>

<VirtualHost www.xyz.co.kr>

  ServerAdmin master at

xyz.co.kr

  DocumentRoot /home/xyz/public_html

  ServerName www.xyz.co.kr

</VirtualHost>

                      

(2) IP Based Virtual Host

<VirtualHost 211.47.65.4>

  ServerAdmin master at

abc.co.kr

  DocumentRoot /home/abc/public_html

  ServerName www.abc.co.kr

</VirtualHost>

<VirtualHost 211.47.65.5>

  ServerAdmin master at

xyz.co.kr

  DocumentRoot /home/xyz/public_html

  ServerName www.xyz.co.kr

</VirtualHost>

                      

(3) Name & IP Mixed Virtual Host

NameVirtualHost 211.47.65.4

<VirtualHost www.xyz.co.kr>

  ServerAdmin master at

xyz.co.kr

  DocumentRoot /home/xyz/public_html

  ServerName www.xyz.co.kr

</VirtualHost>

<VirtualHost 211.47.65.5>

  ServerAdmin master at

abc.co.kr

  DocumentRoot /home/abc/public_html

  ServerName www.abc.co.kr

</VirtualHost>                      

(4) Port Based Virtual Host

  

Listen 80

Listen 8080

<VirtualHost 211.47.65.4:80>

  ServerAdmin master at

abc.co.kr

  DocumentRoot /home/abc/public_html

  ServerName www.abc.co.kr

</VirtualHost>

<VirtualHost 211.47.65.5:8080>

  ServerAdmin master at

xyz.co.kr

  DocumentRoot /home/xyz/public_html

  ServerName www.xyz..co.kr

</VirtualHost>    

8. httpd 재시작시

(1) 아파치를 죽이고 재시작.

(2) -HUP 옵션 이용

(3) -USR1 옵션 이용 (권장)

   이미 동작하고 있던 자식 프로세스들은 그대로 두고 클라이언트의 트랜잭션이 끝나면

새로운 프로세스를 생성하므로 단절현상이 없다.

예) killall -USR1 httpd

  

9. 시스템 리소스 제한–VirtualHost에서 지정.

(1) RLimitCPU      

  각 프로세스에 대해 초단위 지정.

(2) RLimitMEM

  각 프로세스에 대해 바이트(byte) 단위 지정.

RLimitMEM 5000000

하나의 process 가 사용할 메모리의 사용을 5M 로 제한.  

(3) RLimitPROC

  

10. 인증에 대해

<Directory /home2/userid>

Order allow,deny

Allow from all

Deny from 211.47.64

</Directory>

모든 접속은 허용하되 211.47.64 대역은 웹접근차단.

allow, deny 등 순서에 주의한다.

# 다음은 system.tt 의 .htaccess 환경설정부분입니다…

AuthName  “내부 IP 대역 및 NetCenter 인증”

AuthType  Basic

AuthUserFile  /home2/system/public_html/.htpasswd

AuthGroupFile  /dev/null

ErrorDocument 401 “본 사이트는 TT-NetCenter Staff 만 접근 가능합니다.

<Limit GET POST>

require  valid-user

#Satisfy all

order deny,allow

allow from 211.47.64

deny from all

</Limit>    

Satisfy any를 설정하면 두 옵션중 하나만 맞으면 로긴한다.

기본옵션은 Satisfy all(모두 만족해야함) 이다.

httpd.conf 파일 설정 내용

# 아파치 버전 1.3.9 기준

# 아파치 설정 파일은 전통적으로 httpd.conf, srm.conf, access.conf 이렇게

# 3 개로 구성되어 있다. 그러나 내부적으로는 3 개의 파일에 대한 구별을

# 하지 않고 순차적으로 읽어나갈 뿐이다.

# 3 개의 파일 내용은 관례적인 것일 뿐이다. 아파치 신 버전부터는 모든

# 설정 내용이 하나의 거대한 파일 httpd.conf에 들어 있고 나머지 두 파일은

# 빈 파일로 제공되고 있다.

#   예1) 문밥적인 문제가 없는 경우

#   # /usr/sbin/httpd -t

#   Syntax OK

#   예2) httpd.conf 설정에 문법적인 문제가 있는 경우

#   #/usr/sbin/httpd -t

#   Syntax error on line 91 of /etc/httpd/conf/httpd.conf:

#   ServerType must be either ‘inetd’ or ‘standalone’

# 아파치 서버는 httpd.conf 를 읽고 난후, srm.conf –> access.conf 파일을 읽는다.

# 지금 현재 이 설정 파일 안에서 ResourceConfig, AccessConfig 지시자를 사용하여

# 설정 파일 이름을 바꾸면, 변경된 이름의 설정 파일을 읽는다.

# 컴파일하여 직접 설치할 때에는 패키지와 충돌되지 않도록 주의하여야 한다.

# 지시자는 3 개의 기본적인 섹션으로 묶여 있다:

# 1. 아파치 서버 프로세스의 전반적인 작동을 제어하는 지시자

#    (‘global environment, 전체 환경’)

# 2. 가상 호스트에 의해 처리되지 않는 요청을 모두 처리하는 주 서버 또는

#    기본 서버의 작동을 제어하는 지시자.

#    이 지시자 내용은 모든 가상 호스트의 기본값이기도 하다.

# 3. 다른 IP 주소 또는 다른 호스트 이름에 대한 요청을 처리할 가상

#    호스트 설정

###############################################################

##############

### 섹션 1 : 전체 환경 (Global Environment)

# ServerType은 inetd 또는 standalone 둘 중 하나이다.

# inetd 방식은 유닉스 플랫폼에서만 지원된다.

# 참고로 inetd 로 돌릴 경우

# http stream tcp nowait root /www/bin/httpd httpd -f /www/conf/httpd.conf

# 를 /etc/inetd 에 추가 & httpd.conf에서 standalone –> inetd 로 변경.

ServerType standalone

# 서버 루트(ServerRoot) : 서버의 설정 파일, 에러 파일, 로그 파일이

# 기록되는 디렉토리의 최상위 경로명.

# 디렉토리 경로 뒤에 슬래쉬(/) 문자를 쓰지 않는다!!!

ServerRoot “/www”

#LockFile logs/accept.lock

# PidFile: 서버가 시동될 때 자신의 프로세스 고유 번호를 기록할 파일

# root 소유로 돌아가는 httpd 파일의 pid 가 저장됨.

PidFile /www/logs/httpd.pid

# ScoreBoardFile: 내부 서버 프로세스 정보를 기록하는데 사용하는 파일.

# 실제로는 기록 안됨.

ScoreBoardFile /var/run/httpd.scoreboard

# 표준 설정에서 서버는 httpd.conf, src.conf, access.conf 파일을

# 차례대로 읽어나간다. 나중에 있는 2 개의 파일은 현재 아무 내용도

# 없는 빈 상태로 배포되고 있다. 왜냐하면 모든 지시자를 그냥 하나의

# 파일에 적는 것이 더욱 명료하기 때문이다. 주석으로 처리되어 있는

# 값은 기본값이다.

#ResourceConfig conf/srm.conf

#AccessConfig conf/access.conf

# Timeout: 웹상에서 다운로드시 연결이 지속되는 시간

Timeout 300

# KeepAlive: 지속성(persistent) 접속을 허가할 것인가 말 것인가?

# (한 번의 접속에서 여러 개의 요청을 처리할 것인가 여부)

# 허가하지 않기 위해서는 “Off”로 설정한다.

# 허가하지 않는 것과 허가하는 것과의 효율 차이는 매우 크다.

# KeepAlive를 적용하면 지정된 시간(초)동안 접속을 단절하지 않고 유지한다.

# 일반적으로 httpd 데몬은 웹접속이 종료되면 바로 사라지지만(Connectionless)

# KeepAlive를 지정하면 지정시간(KeepAliveTimeout) 동안은 사라지지 않고

# 같은 Client에서 다음 연결을 기다린다.

# 웹사이트를 접속후 ps aux 와 netstat -a를 모니터링 해보면 알 수 있다.

KeepAlive On

# MaxKeepAliveRequests: 지속성 접속 기간 동안 처리할 수 있는 최대 요청 갯수

# 0 을 넣으면 무한대이다. (재부팅 전까지 남아있음)

# 아파치 서버에서 생성된 자식 프로세스는 여기에서 지정한 횟수만큼 요청을 처리하고



# 서 자동으로 사라진다. (메모리 누수 현상에 대비한 방법)

MaxKeepAliveRequests 100

# KeepAliveTimeout: 같은 접속 상태에서 같은 클라이언트의 요청이 타임 아웃되는

# 시간 (초 단위) 로 여기에서 정해준 시간동안만 다음접속을 기다림.

# KeepAlive 가 on이면 연결후 KeepAliveTimeout로 제어되고 이후 TimeOut 로 넘어

감.

KeepAliveTimeout 15

# 서버 풀(Server-pool) 크기 조정. 몇 개의 프로세스가 필요한지 여러분에게

# 추측하도록 하기 보다는 현재의 부하 상태에 자동으로 적응하도록 되어 있다.

# 아파치 서버는 현재의 부하 상태와 순간적으로 급격히 상승하는 경우 값

# (예를 들어 하나의 네스케이프 브라우져에서 동시에 여러 개의 요청이

# 들어올 수 있다)을 처리할 수 있는 충분한 갯수의 서버 프로세스를 유지하려

# 노력한다.

# 아파치 서버는 주기적으로 몇 개의 서버가 요청 대기 상태인지 점검한다.

# 만약 MinSpareServers 보다 적다면 여유 서버 프로세스를 생성한다.

# 만약 MaxSpareServers 보다 많으면 불필요한 여유 프로세스를 제거한다.

# 이 곳에 제시된 기본값은 거의 대부분의 사이트에 적합하다.

#

MinSpareServers 20

MaxSpareServers 40

# 처음 시동할 때 만들 서버의 갯수 — 합리적인 근사치여야 한다.

#

StartServers 20

# 서버 프로세스의 최대값, 즉 동시에 접속할 수 있는 클라이언트 갯수를

# 제한하는 값이다. — 만약 이 값에 도달한다면 클라이언트의 요청은

# 받아들여지지 않는다. 따라서 이 값이 너무 낮아서는 안된다. 이 값은

# 아파치 서버가 너무 많은 자원을 소비하여 전체 시스템을 먹통이 되도록

# 하는 것을 방지하기 위해 사용될 뿐이다.

# 리눅스 기본 설정으로는 256이 최고치이며 커널을 수정하면 1024까지 가능하다.

MaxClients 256

# MaxRequestsPerChild: 각 자식 프로세스가 죽기 전까지 처리할 수 있는

# 요청 갯수. 한 프로세스가 너무 오랫 동안 사용되면 메모리 누출이나

# 자원 누출(아파치 때문에 또는 잘못된 라이브러리 때문에)이 발생할 수

# 있으므로 자식 프로세스는 자동으로 죽는다. 대부분의 시스템에서는

# 필요치 않으나 솔라리스에서와 같이 라이브러리에서의 자원 누출 현상을

# 막기 위해 필요하다. 제한을 두지 않으려면 0 으로 설정한다.

MaxRequestsPerChild 100

# Listen: 아파치를 기본값 이외에도 특정 IP 주소 또는 포트에 연결하도록

# 해준다. (설정을 하지 않아도 무방)

#

#Listen 3000

#Listen 12.34.56.78:80

# BindAddress: 서버의 IP 주소를 설정한다.(설정을 하지 않아도 무방)

# “*”, IP 주소, 또는 완전한 인터넷 도메인 이름을 사용할 수 있다.

# BindAddress 는 오직 한번만 사용할 수 있으나 Listen 은 여러번 사용가능하므로

# BindAddress 대신 Listen을 사용할 것을 권장함.

#BindAddress *

# 동적 공유 객체(Dynamic Shared Object, DSO) 지원–> rpm 방식이 지원함.

#

# DSO 방식으로 만들어진 모듈의 기능을 사용하기 위해서는 그 기능에 관련된

# 지시자를 사용하기에 앞서 알맞게 `LoadModule’ 지시자로 모듈을

# 지시해주어야 한다. DSO 작동방식에 대하여 자세히 알고 싶은 사람은

# 아파치 1.3 배포 파일의 README.DSO 를 읽어보라. 여러분이 갖고 있는

# httpd 바이너리에 내장된(정적으로 링크되어 항상 사용가능한) 모듈 목록을

# 알고 싶을 때에는 `httpd -l’ 명령을 실행한다.

#

# 주의: 모듈을 적재하는 순서는 매우 중요하다. 전문가의 조언 없이

#      아무렇게나 순서를 바꾸지 말라.

# 주의: LoadModule 설정을 하나라도 바꾸었다면 LoadModule 설정 뒤에 따라

#      나오는 AddModule 설정도 똑같이 바꾸어주기 바란다.

# (중략)

#LoadModule mmap_static_module modules/mod_mmap_static.so

LoadModule env_module        modules/mod_env.so

LoadModule config_log_module modules/mod_log_config.so

LoadModule agent_log_module  modules/mod_log_agent.so

# 확장 모듈

#

#LoadModule php_module        modules/mod_php.so

#

# 다음 모듈은 MySQL 데이터베이스와 더불어 서버 스크립팅 언어로 인기를

# 누리고 있는 PHP3 모듈입니다.

# rpm -Uvh mod_php 로 moduel을 설치후 설정함.

# 주의 : 설정을 바꾸고 나서 한 가지 할 일이 더 있다.

#       AddType application/x-httpd-php3 .php3

#       위와 같은 행을 찾아서 주석을 풀어주어야 한다.

LoadModule php3_module       modules/libphp3.so

# 다음 모듈은 아파치 펄 모듈로서 CGI 스크립트로 펄을 많이 사용하는

# 사람들에게 펄 코드 실행 속도의 향상을 가져다 줍니다.

# 주의 : 설정을 바꾼 후 한 가지 할 일이 더 있다.

#       <Location /perl> … </Location>

#       위와 같은 설정을 찾아서 펄 스크립트를 사용할 수 있는

#       디렉토리를 설정해주어야 한다.

#LoadModule perl_module       modules/libperl.so

# 모듈 실행 순서를 정확하게 하기 위해 사용 가능한 모듈(정적 또는 공유

# 모듈 포함)로부터 완전한 목록을 다시 만들어 둔 것이다.

# [LOADMODULE 섹션을 하나라도 수정했다면 이 부분도 역시 알맞게 수정하라]

# (중략)

ClearModuleList

#AddModule mod_mmap_static.c

AddModule mod_env.c

# Extra Modules(중략)

#AddModule mod_php.c

AddModule mod_php3.c

#AddModule mod_perl.c

#

# ExtendedStatus 지시자는 “server-status” 처리기가 호출되었을 때

# 아파치가 “매우 자세한” 상태 정보를 생성시킬 것인지

# (ExtendedStatus On) 아니면 매우 기본적인 정보만 생성시킬 것인지를

# (ExtendedStatus Off) 제어한다. 기본값은 Off 이다.

ExtendedStatus On

###############################################################

##############

### 섹션 2: ‘주(Main)’ 서버 설정

#

# 이 섹션에 있는 지시자는 <VirtualHost> 정의에 의해 처리되지 않는

# 모든 요청에 응답할 ‘주’ 서버(기본값)가 사용할 값을 정한다.

# 이 값들은 또한 이 파일 뒷 부분에서 정의할 모든 <VirtualHost>

# 의 기본값을 제공하기도 한다.

# 여기 나오는 모든 지시자는 <VirtualHost> 안에서도 사용할

# 수 있으며 그 안에서 사용되면 해당 가상 호스트에 대하여 전체

# 기본값을 무시하고 새롭게 정한 값이 채택된다.

#

# 만약 ServerType (‘Global Environment’ 섹션에서 설정)이 “inetd”인

# 경우, inetd 설정 내용을 따르기 때문에 다시 몇 가지 지시자는

# 아무런 효력을 발휘하지 않는다.

# ServerAdmin 지시자까지 그냥 건너뛴다.

#

# Port: 독립실행형(standalone) 서버가 요청을 기다리는 포트.

# 1023 번보다 낮은 번호의 포트에 대해서는 httpd가 처음에는

# root 권한으로 실행되어야 한다.

# 지정하지 않으면 default 로 80 으로 지정됨

Port 80

# httpd가 다른 사용자 또는 그룹 권한으로 실행되게 하려면 우선은

# httpd가 root 사용자 권한으로 실행되고 나서 설정한 다른 사용자

# 권한(nobody등)으로 전환해야 한다.

#

# User/Group: httpd가 실행된 권한의 사용자/그룹의 이름(또는 #번호).

# . SCO (ODT 3)에서는 “User nouser”와 “Group nogroup”을 사용한다.

# . UPUX 에서는 nobody로 실행하는 경우 공유 메모리를 사용할 수

#   없을 것이다. 이 때는 www 등의 사용자를 만들고 그 사용자 권한으로

#   실행되도록 한다.

# 주의) 몇몇 커널들은 60000 이상의 (unsigned) 그룹 값을 설정하면

# setgid(Group), semctl(IPC_SET) 함수를 거부한다.

# 이런 시스템에서는 Group #-1을 사용하지 말라!

#

User nobody

Group nobody

# ServerAdmin: 서버에 문제가 발생했을 때 메일을 보낼 메일 주소.

# 이 주소는 예를 들어 에러 문서(404,500)와 같이 서버가 생성하는 페이지에

# 나타날 것이다.

ServerAdmin master at tt.co.kr

# ServerName은 클라이언트 프로그램에게 돌려주는 서버 이름이 다른 경우

# 호스트 이름을 설정할 수 있게 해준다. (예를 들어, 호스트의 실제 이름이

# 아닌 ‘www’를 사용하도록 하는데 사용할 수 있다.)

#

# 주의: 호스트 이름을 아무렇게나 만들어선 안된다. 이 이름은 여러분의

# 호스트에 주어진 타당한 DNS 이름이어야 한다.

# 호스트가 등록된 DNS 이름을 갖고 있지 않는 경우에는 이 곳에 IP 주소를

# 적는다. 어찌 되었든 IP 주소를 사용하여(예를 들어 http://123.45.67.89/)

# ServerName를 잘못 설정하면 http://ID/~id 했을 때 접속이 되지 않는다.

# 주석 처리해 두면 된다.

#ServerName tt.co.kr

# DocumentRoot: 제공할 문서의 기본 디렉토리.

# 기본적으로 모든 요청은 이 디렉토리로부터 처리된다.

DocumentRoot “/www/htdocs”

# 아파치가 접근할 수 있는 각 디렉토리에 대하여 어떤 서비스와 기능을

# 허용할 것인지 거부할 것인지 여부를 설정할 수 있다.

# 디렉토리에 대한 설정 내용은 그 하부 디렉토리에도 영향을 미친다.

# Webzip 등의 접속을 제한한다.

BrowserMatch “WebZIP” go_out

BrowserMatch “Teleport” go_out

BrowserMatch “GetRight” go_out    

<Directory />

Options Includes ExecCGI

  AllowOverride All

  Order allow,deny

  Allow from all

  Deny from env=no_access      

</Directory>

# options에서 all을 지정하면 Multiviews, IncludeNOEXEC 등을 제외한 모든 설정을 활

성# 화한다.

# ExecCGI : CGI 스크립트를 사용한다.

# FollowSymlinks : 심볼릭 링크를 사용할 수 있도록 한다.

# Includes : SSI를 사용 가능하도록 한다.

# IncludesNOEXEC : SSI 는 사용하지만 SSI 내에 exec와 include 는 허용하지 않음.

# <!–#exec cmd=”cat /etc/passwd”–> 와 같이 설정하였을 경우 보안상

문제가 되므



# IncludesNOEXEC를 설정하여야 함. 그러나 textcounter 의 경우 include를 쓰므로

# 설정을 하여야 하나 보안상 좋은 방법은 아니다.

<Directory “/www/htdocs”>

# 다음 값에는 “None”, “All”, 또는 “Indexes”,

“Includes”,

# “FollowSymLinks”, “ExecCGI”, “MultiViews”의 자유로운

조합이

# 가능하다.

Options Includes ExecCGI

# 특정 디렉토리 설정후 지정할 경우 이전의 설정은 무효화되며 아무런 언급이 없으면 기

본# 적으로 ALL 이 된다.

# 이전의 설정에 추가 및 삭제 할 경우에는 Options +ExecCGI -Indexes 와 같이 한다.

# 사실 이 부분은 삭제를 해도 무방하다.

# 다음은 각 디렉토리에 위치한 .htaccess 파일에서 어떤 옵션을

# 마음대로 제어할 수 있는지 결정한다.

# “All” 또는 “Options”, “FileInfo”, “AuthConfig”,

“Limit”의 자유로운

# 결합이 가능하다.

# .htaccess에서 지정설정할수 있는 옵션에 대한 설명

# AuthConfig : AuthGroupFile,AuthName,AuthType,AuthUserFile

# AuthUserFile : AuthName, AuthType, require 가 가능.

# Limit : Limit의 사용을 허가함

# All : 위의 모든 설정을 포함한다.

# None : 어떠한 설정도 허용하지 않는다.(즉 .htaccess 가 작용하지 않음)

  AllowOverride All

# 서버로부터 자료를 얻어갈 수 있는 위치를 제어한다.

  Order allow,deny

  Allow from all

  Deny from env=no_access

</Directory>

# UserDir: ~user 요청을 받았을 때 보여줄 사용자의 홈 디렉토리 이름.

# 주의 : 알짜 리눅스 시스템에서는 사용자가 자신의 홈 디렉토리에 public_html

#       디렉토리를 만들어도 외부에서 홈 페이지를 볼 수 없다.

#       왜냐하면 각 계정 홈 디렉토리에 대한 보안을 중요하게 생각했기 때문에

#       홈 디렉토리에 대하여 사용자 계정과 사용자 자신의 그룹 이외에는

#       아무런 접근 허가권도 갖고 있지 않기 때문이다.#

#       개인 홈 디렉토리를 가질 사람은 chmod a+x ~ 명령을 일단 실행해주어

#       (보통) nobody 권한의 아파치 프로세스가 홈 디렉토리에 접근할 수

#       있도록 허가해주어야 한다(chmod 701 ~userdir 을 하면 된다.).

UserDir public_html

# UserDir 디렉토리에 대한 접근을 제어한다. 다음은 사용자 홈 페이지에

# 대하여 읽기만 가능하도록 한 예제 설정 내용이다. 참고 자료로

# 사용하기 바란다.

#

#<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>

# DirectoryIndex: 디렉토리명만 타이핑했을 때 인덱스로 보여줄 파일이나

# 파일 목록의 이름을 나열한다. 여러 개를 나열할 때는 스페이스로

# 구분한다.좌측에서부터 순서대로 보여주고 없으면 404에러를 낸다.

DirectoryIndex index.html index.htm index.shtml index.cgi index.php3

# AccessFileName: 각 디렉토리에 대하여 접근 제어 정보 내용을

# 담고 있을 파일 이름

AccessFileName .htaccess

# 다음 행은 웹 브라우져가 .htaccess 파일을 접근할 수 없도록 하는

# 설정이다. .htaccess에는 인증 정보가 들어있는 경우가 빈번하므로

# 보안 상 이유로 이 파일에 대한 접근은 불허해야 한다.

# 웹 방문객들이 이 파일을 보게 하고 싶으면 다음 행들을 주석 처리하라.

# 만약 AccessFileName 설정을 다른 파일명으로 바꾸었다면 알맞게

# .htaccess를 그 이름으로 바꾸어준다.

#

# 또한 사람들이 웹 서버 패스워드 파일을 .htpasswd라고하는 경향이

# 있기 때문에 .ht 로 시작하는 파일을 웹브라우저에서 볼수 없도록 모두 보호한다.

# 아파치 1.3.x 버전부터 <Files> <Directory> 지시자에서 ~ 다음에

# 정규 표현식을 사용할 수 있다.

#

<Files ~ “^\\.ht”>

  Order allow,deny

  Deny from all

</Files>

# CacheNegotiateDocs: 기본적으로 아파치는 내용에 따라 협상된 문서에

# 대해서는 “Pragma: no-cache” 내용을 전송한다. 이 행은 프록시 서버로

# 하여금 문서를 캐쉬하지 않도록 요청한다. 다음 행의 주석을 풀면

# 이 기능을 해제하고 모든 프록시가 문서들을 캐쉬할 수 있도록 한다.

#

#CacheNegotiatedDocs

#

# UseCanonicalName: (1.3 버전에 새롭게 등장) 이 설정을 켜두면,

# 아파치가 자기 참조 URL(반응이 오고 있는 서버를 다시 가리키는

# URL)을 만들 필요가 있을 때마다 “공식적인” 이름을 만들기 위해

# ServerName과 Port를 사용한다. 그렇지 않으면 아파치는 가능한 한

# 클라이언트가 제공한 호스트이름:포트 값을 사용한다.

# 이 설정은 CGI 스크립트의 SERVER_NAME, SERVER_PORT에도 영향을

# 미친다.

UseCanonicalName On

# TypesConfig 는 mime.types 파일 또는 이에 해당하는 파일을 찾을

# 위치를 결정한다.

TypesConfig /etc/mime.types

# DefaultType이란 파일 확장자와 같은 것을 통해 MIME 타입을 알 수 없는

# 문서에 대하여 사용할 기본 MIME 타입을 말한다. 여러분의 서버에 주로

# 텍스트나 HTML 문서가 많다면 “text/plain”을 쓰는 것이 좋다.

# 대부분이 실행 프로그램이나 이미지 등 바이너리인 경우에는

# 웹 브라우져가 텍스트라고 생각하여 바이너리 파일을 화면에 표시하지

# 않도록 하기 위해 “application/octet-stream”를 적는다.

DefaultType text/plain

# mod_mime_magic 모듈을 사용하면 파일의 내용을 가지고 파일의 타입에

# 힌트를 얻는다. MIMEMagicFile 지시자를 사용하여 모듈에게 힌트

# 정보가 저장되어 있는 파일을 설정한다.

# mod_mime_magic은 기본 서버의 일부가 아니다.(따라서 LoadModule

# 설정을 사용하여 모듈을 추가해야 한다.) 또는 서버를 다시 컴파일해서

# mod_mime_magic을 추가해야 한다. 그렇기 때문에 <IfModule> 컨테이너에

# 포함되어 있는 것이다. 다음 설정은 모듈이 서버에 포함되어 있을 때에만

# MIMEMagicFile 지시자를 처리하도록 해준다.

<IfModule mod_mime_magic.c>

  MIMEMagicFile conf/magic

</IfModule>

#

# HostNameLookups: 로그화일에 생성시 클라이언트의 이름 또는 IP 주소만을 기록할



# 여부. 예를 들어 www.apache.org (on) 또는 204.62.129.132 (off)

# 기본값이 off 인 이유는 각 클라이언트 요청이 올 때마다 최소한 1 번

# 이상의 네임 서버 요청이 발생하기 때문이다. 반드시 Off 로 설정한다.

HostnameLookups Off

# ErrorLog: 에러 기록 파일의 위치.

# <VirtualHost> 안에서 ErrorLog 설정을 하지 않으면

# 그 가상 호스트에 관련된 에러 메시지도 역시 이 곳에 기록된다.

# <VirtualHost> 안에서 에러 로그 파일을 정의하면

# 관련된 에러 메시지는 그 파일로 저장된다.

ErrorLog logs/error_log

# LogLevel: error_log에 기록될 메시지 분량을 제어한다.

# debug, info, notice, warn, error, crit, alert, emerg 등의

# 값이 가능하다.

# alert, emerg.

LogLevel warn

# 다음 지시자는 CustomLog 지시자(아래 참고)에서 사용할 몇 가지

# 형식에 대한 별명을 정의한다.

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

# 접근 로그 파일의 위치와 형식(공통 로그파일 형식)

# <VirtualHost> 안에서 접근 로그파일 설정을 하지 않으면

# 모든 기록이 이 파일에 남게 된다. 이와 반대로 각 <VirtualHost> 마다

# 접근 로그파일을 정의하면 모든 처리가 바로 그 파일에 기록된다.

#CustomLog logs/access_log common

# 에이전트 로그파일과 참조자(referer) 로그파일을 갖기 위해서는

# 다음 지시 내용의 주석 처리를 해제하라.

# 여기서 에이전트란 여러분의 사이트에 방문하는 브라우져를 말한다.

# 에이전트 로그를 남기면 서버에 방문하는 브라우져의 종류에 대한

# 통계를 낼 수 있다.

# 참조자란 주로 배너 광고주에게 중요한 것으로서 여러분의 사이트 바로

# 직전에 방문한 사이트를 말한다.

#CustomLog logs/referer_log referer

#CustomLog logs/agent_log agent

# 하나의 로그파일에 접근, 에이전트, 참조자 정보를 다 저장하기 위해서는

# (통합 로그파일 형식) 다음 지시 내용을 사용하라.

# 몇 달만 운영해도 접속이 많은 사이트에서는 combined 로그 파일이 어마어마하게

# 커져서 루트 파일 시스템을 꽉 채워 버리는 일이 발생할 수 있다!

#CustomLog logs/access_log combined

#

# 부차적으로 서버가 생성하는 페이지(에러 문서, FTP 디렉토리 목록,

# mod_status, mod_info 출력 등, 그러나 CGI 생성 문서는 제외)에

# 서버 버전과 가상 호스트 이름을 포함하는 행을 추가하도록 한다.

# “Email”로 설정하면 ServerAdmin으로의 mailto: 링크를 포함한다.

# On | Off | EMail 중 하나로 설정한다. 기본값은 On

#

#ServerSignature On

# Aliases: 필요한 만큼의 별칭을 만들어 사용한다.(제한 없음)

# 형식은 다음과 같다.

# Alias 가짜이름 실제이름

#

# 가짜 이름 뒤에 / 를 포함하면 아파치 서버는 URL에도 / 이 있어야

# 처리함을 잘 알아두자. 따라서 “/icons”는 별칭 처리되지 않고

# “/icons/”만 별칭 처리된다.

Alias /icons/ “/home/httpd/icons/”

<Directory “/home/httpd/icons”>

  Options Indexes MultiViews

  AllowOverride None

  Order allow,deny

  Allow from all

</Directory>

# ScriptAlias: 서버 스크립트를 포함하는 디렉토리를 제어한다.

# ScriptAlias는 근본적으로 Alias와 같으나 가리키고 있는 실제 디렉토리

# 안에 들어있는 문서를 실행 프로그램으로 취급하여 실행한다.

# 맨 뒤에 붙는 “/” 에 대한 규칙은 Alias와 마찬가지이다.

ScriptAlias /cgi-bin/ “/home/httpd/cgi-bin/”

# “/home/httpd/cgi-bin” 부분은 ScriptAlias로 별칭 처리된 실제 CGI

# 디렉토리로 설정해야 한다.

<Directory “/www/cgi-bin”>

  AllowOverride None

  Options ExecCGI

  Order allow,deny

  Allow from all

  Deny from env=no_access          

</Directory>

# Options None를 설정해도 CGI (Count.cgi등)가 작동하는 이유?

# 형식: Redirect 예전URI 새URI

# Rewrite 는 welcome.to 등과 같은 도메인 포워딩 서비스에서 쓰이는 방법이며 부하가



# 이 걸린다. Rewrite를 쓰려면 apache install 시

# ./configure –prefix=/www –activate-module=src/modules/php4/libphp4.a

# 에 –enable-module-rewrite 를 추가하면 된다.

#

# 서버가 생성하는 디렉토리 목록의 표시 상태를 제어하는 지시자.

# FancyIndexing은 예쁜 디렉토리 목록 또는 표준적인 디렉토리 목록 여부를

# 결정한다.

IndexOptions FancyIndexing

# AddIcon으로 시작하는 지시자는 서버에게 다양한 파일, 파일명 확장자에

# 대하여 어떤 아이콘을 보여 줄 것인지 말해준다. 이 값들은

# FancyIndexing을 사용하는 경우에만 해당된다.

AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

AddIconByType (TXT,/icons/text.gif) text/*

AddIconByType (IMG,/icons/image2.gif) image/*

AddIcon /icons/binary.gif .bin .exe

AddIcon /icons/tar.gif .tar

AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip

AddIcon /icons/a.gif .ps .ai .eps

(중략)

# DefaultIcon이란 명시적인 아이콘을 갖고 있지 않는 파일에 대한

# 기본 아이콘 파일을 설정한다.

#

DefaultIcon /icons/unknown.gif

# AddDescription은 인덱스의 파일명 뒤에 간단한 설명을넣을 때 사용한다.

# FancyIndexing을 사용할 때에만 보인다.(Indexes를 설정시 적용)

#AddDescription “GZIP compressed document” .gz

#AddDescription “tar archive” .tar

#AddDescription “GZIP compressed tar archive” .tgz

# ReadmeName은 서버가 디렉토리 목록 뒤에 내용을 덧붙여 넣을 README 파일의

# 이름을 설정한다.

# HeaderName은 디렉토리 인덱스 앞에 내용을 덧붙일 파일명을 설정한다.

# 서버는 먼저 name.html을 찾고 그것이 있으면 그 내용을 포함한다.

# 만약 없다면 서버는 name.txt 파일을 찾고 평범한 텍스트 내용으로

# 추가한다.(적용안됨)

ReadmeName README

HeaderName HEADER

# IndexIgnore는 디렉토리 인덱싱에 있어 목록에서 제외시킬 파일명을 설정한다.

# 쉘 스타일의 와일드 카드를 사용할 수 있다.

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

# AddEncoding은 특정 브라우져(모자익/X 2.1+)로 하여금 자료를 받으면서

# 정보의 압축을 풀 수 있도록 해준다. 주의: 모든 브라우져가 이 기능을

# 지원하는 것은 아니다. 이름이 유사하기는 하지만 다음부터 나오게 될

# Add로 시작하는 지시자들은 FancyIndexing과는 관련이 없다.

AddEncoding x-compress Z

AddEncoding x-gzip gz tgz

# AddLanguage는 문서의 언어를 명시한다. 내용 협상 과정을 통해 브라우져가

# 이해할 수 있는 언어의 문서를 제공하는 것이 가능하다.

# 접미어(suffix)는 언어 키워드와 꼭 같은 필요는 없다. 예를 들어

# 폴란드어(Polish)로 된 문서는 네트웍 표준 언어 코드가 pl 이지만

# 펄 스크립트와 확연히 구별하기 위해 “AddLanguage pl .po”라고 사용한다.

#(적용안됨)

AddLanguage ko .ko

AddLanguage en .en

AddLanguage fr .fr

AddLanguage de .de

# LanguagePriority는 내용 협상 중 동점이 발생하는 경우 언어 우선권을

# 부여한다. 언어의 우선권을 내림차순으로 나열하면 된다.

LanguagePriority ko en fr de

# AddType를 사용하면 mime.types 파일 수정없이 MIME 설정을 할 수 있고

# 또는 어떤 파일들에 대하여 특정 타입으로 처리하도록 할 수 있다.

# 예를 들어, PHP3 모듈에 대해서는 다음과 같이 사용한다.

#

AddType application/x-httpd-php3 .php3

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

# PHP4 Zend 에 대한 설정

#AddType application/x-httpd-php .php

#AddType application/x-httpd-php-source .phps

#다음은 PHP/FI (PHP2)를 위한 것입니다.

#AddType application/x-httpd-php .phtml

# .tgz 파일에 대한 타입 설정

AddType application/x-tar .tgz

# AddHandler를 사용하면 특정 파일 확장자와 “처리기”를 연결하거나

# 특정 파일 타입에 특정 동작(action)을 연결할 수 있다.

# 서버에 내장되어 있거나 또는 Action 명령을 사용하여 추가할 수

# 있다.

# 서버 측 포함(SSI) 또는 ScriptAlias 처리된 디렉토리 외부에

# 존재하는 CGI 스크립트를 사용하고 싶을 때는 다음 내용의

# 주석을 없앤다.

# CGI 스크립트를 사용하기 위해:

AddHandler cgi-script .cgi .pl

# 서버 처리 HTML 파일(SSI) 사용하기 위해:

AddType text/html .shtml

AddType text/html .htm

AddHandler server-parsed .shtml

# Action을 사용하면 매칭되는 파일이 호출될 때마다 그 미디어 타입에 맞는

# 스크립트를 시행시킬 수 있다. 빈번하게 사용되는 CGI 파일 프로세서에

# 대하여 반복적으로 URL을 사용하지 않아도 된다.

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

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

# msql 확장자를 가진 파일에 대해 w3-msql을 통해 동작하도록 하기 위해

# cgi 나 SSI 처럼 서버자체에 내장된 기능이 아니므로 action을 추가 정의해줌.

AddHandler msql .msql

Action msql /cgi-bin/w3-msql  

# 아파치의 send-asis HTTP 파일 기능을 사용하기 위해서는 다음 행의

# 주석을 없앤다.

#AddHandler send-as-is asis

# 서버 처리 이미지 맵 파일을 사용하려면…

AddHandler imap-file map

# type map을 사용하려면…

#

#AddHandler type-map var

# perl 모듈을 사용하려면 다음 세션의 주석을 풉니다.

#

#Alias /perl/ /home/httpd/perl/

#<Location /perl>

#SetHandler perl-script

#PerlHandler Apache::Registry

#Options +ExecCGI

#</Location>

# MetaDir: 아파치 서버가 메타 정보 파일을 찾을 디렉토리 이름.

# 이 파일에는 문서를 보낼 때 추가하고자 하는 추가 HTTP 헤더 정보가

# 들어있다.

#MetaDir .web

# MetaSuffix: 메타 정보를 담고 있는 파일의 접미어를 설정한다.

#

#MetaSuffix .meta

# 사용자 정의 에러 반응 메시지 (아파치 스타일)

# 다음 3 가지 방법으로 가능하다.

#   1) 보통의 텍스트

#ErrorDocument 500 “The server made a boo boo.

# 주목: ” 표시는 텍스트임을 알려주는 것으로서 그 자체는 출력되지 않는다.

#   2) 지역적인 방향 전환

#ErrorDocument 404 /missing.html

# 지역적 URL인 /missing.html로 방향 전환하기

#ErrorDocument 404 /cgi-bin/missing_handler.pl

# 주목: 스크립트나 SSI로 방향 전환시킬 수 있다.

#   3) 외부 방향 전환

#ErrorDocument 402 http://some.other_server.com/subscription_info.html

# 주목: 원래 요청과 관련있는 환경 변수의 상당수가 스크립트에

# 전달되지 못한다는 점을 알고 있어야 한다.

# 다음 지시자는 보통의 HTTP 반응 방식을 수정한다.

# 첫번째 것은 네스케이프 2.x 또는 그를 흉내내는 브라우져에 대하여

# KeepAlive 기능을 쓰지 않도록 한다. 이 브라우져들은 KeepAlive 구현에

# 문제점을 갖고 있기 때문이다.

# 두번째 것은 HTTP/1.1을 잘못 구현하였고 301 또는 302 (redirect) 응답에

# 대하여 KeepAlive를 제대로 지원하지 못하는 마이크로소프트 인터넷

# 익스플로러 4.0b2를 위한 것이다.

#

BrowserMatch “Mozilla/2” nokeepalive

BrowserMatch “MSIE 4\\.0b2;” nokeepalive downgrade-1.0 force-response-1.0

# 다음은 기본적인 1.1 응답도 제대로 처리하지 못함으로써 HTTP/1.1 스펙을

# 위반하고 있는 브라우져에 대하여 HTTP/1.1 응답을 하지 않도록 한다.

BrowserMatch “RealPlayer 4\\.0” force-response-1.0

BrowserMatch “Java/1\\.0” force-response-1.0

BrowserMatch “JDK/1\\.0” force-response-1.0

# http://servername/server-status을 통해 서버 상태 보고를 허용한다.

# 여기서 “.your_domain.com” 부분을 허용할 도메인으로 바꿔 사용하라.

#<Location /server-status>

#   SetHandler server-status

#   Order deny,allow

#   Deny from all

#   Allow from .your_domain.com

#</Location>

# http://servername/server-info를 통하여 원격 서버 설정 보고를 허용한다.

# (mod_info.c가 적재되어 있어야 한다.)

# 여기서 “.your_domain.com” 부분을 허용할 도메인으로 바꿔 사용하라.

#<Location /server-info>

#   SetHandler server-info

#   Order deny,allow

#   Deny from all

#   Allow from .your_domain.com

#</Location>

# 1.1 버전 이전의 오래 된 버그를 악용하려는 사람들이 있다는 보고를 받았다.

# 이 버그는 아파치 일부분으로 제공한 CGI 스크립트와 연관있다.

# 이 부분의 주석 처리를 없애면 이 버그를 악용하는 공격이 있을 때

# phf.apache.org 상의 기록 스크립트로 방향 전환시킬 수 있다.

# 또는 support/phf_abuse_log.cgi 스크립트를 사용하여 여러분 직접 기록할

# 수도 있다.

#<Location /cgi-bin/phf*>

#   Deny from all

#   ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi

#</Location>

# 프록시 서버 지시자. 프록시 서버 기능을 작동시키려면 다음 행의

# 주석을 해제시켜준다.

#<IfModule mod_proxy.c>

#ProxyRequests On

#<Directory proxy:*>

#   Order deny,allow

#   Deny from all

#   Allow from .your_domain.com

#</Directory>

# HTTP/1.1 “Via:” 헤더를 처리할 것인지 여부를 결정한다.

# (“Full”은 서버 버전을 포함하고 “Block”은 나가는 모든 자료에서

# Via: 헤더를 제거한다.)

# Off | On | Full | Block 중 하나의 값을 지정한다.

#ProxyVia On

# 캐쉬 기능도 사용하기 위해서는 다음 행의 주석을 풀어준다:

# (CacheRoot가 없으면 캐쉬하지 않음)

#CacheRoot “/home/httpd/proxy”

#CacheSize 5

#CacheGcInterval 4

#CacheMaxExpire 24

#CacheLastModifiedFactor 0.1

#CacheDefaultExpire 1

#NoCache a_domain.com another_domain.edu joes.garage_sale.com

#</IfModule>

# 프록시 설정 끝

###############################################################

##############

### 섹션 3: 가상 호스트

#

# VirtualHost: 여러분의 리눅스 박스에 여러 개의 도메인/호스트이름을

# 관리하고 싶다면 각각에 대하여 VirtualHost 를 설정한다.

# 가상 호스트를 설정하기에 앞서 자세한 설명을

# <URL:http://www.apache.org/docs/vhosts/>에 들러 읽어보기 바란다.

# 가상 호스트 설정 내용을 점검해보기 위해서는 아파치를 실행할 때

# 명령행 옵션으로 ‘-S’를 사용한다.

# 이름 기반의 가상 호스트를 사용하려면 사용할 IP 주소 (최소 1 개,

# 그리고 포트 번호)를 정의해주어야 한다.

# 경고 : 아파치 1.2.x 버전에서만 가상 호스트 기능을 사용해 온 관리자들은

#       아파치 1.3.x 버전에서 NameVirtualHost 지시자로 IP 주소를

#       해주어야만 가상 호스트가 제대로 동작한다는 사실을 꼭 알아야 한다!!!

#       1.2 버전을 쓰다 1.3 버전으로 와서 가상 호스트가 동작하지 않는

#       문제의 99% 는 바로 NameVirtualHost 설정에 있다.

#NameVirtualHost 12.34.56.78:80

NameVirtualHost 210.121.176.235

<VirtualHost 210.121.176.235>

  ServerAdmin master at

tt.co.kr

  DocumentRoot /home/httpd/html

  ServerName 210.121.176.235

</VirtualHost>

<VirtualHost tt.co.kr>

  ServerAdmin master at

tt.co.kr

  DocumentRoot /home/httpd/html

  ServerName tt.co.kr

  ServerAlias www.tt.co.kr   tt.co.kr

TransferLog “|rotatelogs /log/public_html/tt/log/access_log 3600”

LogFormat “%h %l %u %t \\”%r\\” %s %b \\”%{Referer}i\\”

\\”%{User-agent}

i\\””

</VirtualHost>

##################### httpd.conf 설정 끝 ###########################

고성능의 아파치 서버를 셋팅 하는법

(1) 기본값으로 되어 있는 MaxcClient 254 를 1024까지 높인다.

–> 추가적으로 커널 컴파일과 아파치 컴파일 과정이 필요하다.

    

커널 컴파일

/usr/src/linux/include/linux/아래의

fs.h / tasks.h / limits.h 세 화일안에서 NR_OPEN(files/1PS),NR_FILE(files/SYS)

NR_TASKS(PSs/SYS)등을 다음과 같이 조정.

files/process NR_OPEN 1024

           NR_SUPER 256 (파일 시스템 마운트수)

           NR_INODE 24576

           NR_FILE 8192 (동시에 열수 있는 파일수)

files/user   CHILD_MAX 4096

           OPEN_MAX 1024

           NR_TASKS 2048 (프로세스 총수)

           NR_TASKS/8

           MIN_TASKS FOR_ROOT 16

아파치 컴파일

src/include/httpd.h 의 HARD_SERVER_LIMIT를 256에서 1024 로 조절.

예) 기본 설치값에서 MaxClient를 1240 으로 설정했을 때…

WARNING: MaxClients of 1240 exceeds compile time limit of 256 servers,

lowering MaxClients to 256. To increase, please see the

HARD_SERVER_LIMIT define in src/include/httpd.h.    

(2) port를 80 번외에 추가로 설정.

・ cp  /www/conf/http.conf /www/conf/httpd8080.conf

・ cp  /www/bin/httpd /www/binhttpd8080

・ adduser www

・ httpd8080.conf 의 user, group를 nobody에서 www 로 변경

・ /www/bin/httpd8080 -f /www/conf/httpd8080.conf 로 추가 데몬 설치

・ 홈페이지내에 접속자수가 많은 링크를 http://domain명:8080/filename.html 로 수정.

・ 이런 방식으로 8081, 8082, 8083…. 등으로 여러 port를 둘 수 있다…

(3) DNS를 이용한 Round Robin 방식(Load Balancing 효과)

웹서버 자체를 여러개의 서버로 분산.

IP Based Virtual Host : 하나의 도메인에 여러 IP 할당.

(4) 서버의 설정 조정

MaxClients : 1024

HostNameLookups off

MaxSpareServers 40

MinSpareServers 20

StartServers 20

MaxRequestsPerChild 30

(적절히 설정하여 새로운 자식 프로세스가 생성될 때의 오버헤드를 줄일 수 있다.)

KeepAlive 5

(5) apache 컴파일시 불필요한 모듈을 첨가하지 않는다.(예: php)

  ServerAlias 등을 이용하여 httpd.conf 의 사이즈를 최소화한다.  

  access_log / error_log를 생성되지 않도록 한다.

서버 이전시 중단없는 서비스를 하는 방법

예) test.co.kr을 1 번 서버에서 2번 서버로 이전시

(1) DNS 서버에서 web.test.co.kr을 2번 서버로 셋팅

(2) 데이터 복사 / 이전후 1번 서버의 httpd.conf의 test.co.kr 설정부분에서

  Redirect / http://web.test.co.kr/

추가 후 웹서버 killall -USR1 httpd

(3) DNS 서버에서 test.co.kr / www.test.co.kr을 2번 서버로 재설정

(4) 2번 서버에서 web.test.co.kr 외에 test.co.kr / www.test.co.kr 설정후

      웹서버 재설정

(5) 주의할점 : 서버이전이 완전히 완료되기 전까지는 1번 웹서버를 변경후

killall -USR1 httpd를 하지 않는다.

꼭 하여야 한다면 DNS 서버에서 1 번 서버로 재설정 후 한다.

killall -USR1 httpd 후에는 DNS 도 다시 설정후 Refresh 한다.

기대효과 : 사용자 입장에서는 중단없는 서비스가 가능하며 www 또는 도메인명으

로 접속시 브라우저의 주소에 web… 과 같이 나타나면 아직 이전이 안된 것이고

제대로 나타나면 이전이 완료된 것이다.

e-mail 등은 MX RECORD를 써서 설정할 수 있다.

? 추가로 학습(개발)하여야 할 내용.

(1) Clustering(복수개의 서버운영시) 등 대형 웹사이트 운영시 시스템 구현방법.

(2) Proxy / Caching Server 구현 방법.

(3) SSL 서버를 통한 보안 서버의 심화 내용

(4) suEXEC를 이용한 보안 문제 해결.

? Q & A

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

페이스북/트위트/구글 계정으로 댓글 가능합니다.