미니옵빠의 code stubs

아파치 설정 httpd.conf 설명 본문

Server/Apache

아파치 설정 httpd.conf 설명

미니옵빠 2011. 8. 28. 19:36

출처: http://blog.paran.com/yisupark/639325


아파치 설정

ServerType standalone
=> 서버를 돌리는 방법으로 standalone하고 inet 모드가 있죠.
inet 데몬을 이용하는거보다는 당연히 standalone으로 돌려야겠죠..

ServerRoot "/usr/local/apache"
=> 아파치가 설치된 디렉토리를 가리키겠죠?

PidFile /usr/local/apache/logs/httpd.pid
=> 다 아시리라 생각하고 다음으로..

ServerTokens ProductOnly
=> 서버 정보를 날려주는 범위를 정해줍니다. apache 1.3.17 이런식으로 나오는데.
위의 줄을 써주면 "apache" 라고만 표시되죠.. 그래서 버전이라든지 다른 addon을
알 수 없게 해줍니다.

Timeout 5
=> 이게 기본값이 300으로 알고 있는데요.. telnet localhost 80 해서 연결된 다음에
"GET / HTTP/1.1 엔터.엔터" 여기까지 걸리는 시간이라고 보시면 됩니다.
이게 길게 설정되어 있으면 80번 포트에 달라붙어 있기만 한 연결들의 접속을
강제로 끊어주질 못하기 때문에 DoS 공격에 시달릴수 있습니다.
반대로 적게 설정되면 속도가 느려서 감질나게 오는 페이지들 중간에 끊기기도
하고요.. 속도가 엄청나게 느린 CGI가 있다면 약간 늘려주는게 좋을듯하고.
그렇지 않다면 적게 잡아도 됩니다. 2초로 잡은 서버도 많이 있습니다.

KeepAlive On
=> HTTP 접속이 이루어질때 한번 connect 되고 문서(파일)하나 받은 다음에
disconnect 되고나서 다름파일 받을때 다시 connect 되면.. 속도가 많이 느리겠죠.
보통 초기 화면에 그림이 10개 정도 되면.. 속도가 엄청 느려질테니까요..
HTTP 1.1에서는 한번에 2개의 연결만 되니까요..
(브라우저 세팅에서 늘리면 그 이상도 가능하지만)
어째튼... 파일 하나 받은다음에 연결을 끊지 않고 keepalive 상태로 유지해서
파일을 계속 전송하는것을 허용하는게 on이고. 허용하지 않느게 off 입니다.

MaxKeepAliveRequests 10
=> keepalive의 최대 치를 정합니다. keepalive 프로세스(데몬.서버)가 이 이상
넘지 못하겠져..

KeepAliveTimeout 1
=> keepalive 상태를 얼마나 오래 유지할지를 설정하는겁니다.
여기서 1로 한 것은, 한페이지 단위로 keepalive 유지해주기 위함입니다.
한페이지의 이미지를 받는 동안은 keepalive를 해주고..
다 받으면 keepalive를 끊어줍니다. 서버 사정에 따라서 늘려도 괜찮지만
지나치게 크게 잡으면 데몬수가 증가합니다.
데몬이 keepalivetimeout 시간만큼 아무것도 안하고 그냥 떠있습니다.

MinSpareServers 10
=> 아파치는 child process를 folk 하는 방식으로 동작하는데, 여분의 프로세스 수가
min 이하이면 그만큼 생성합니다.

MaxSpareServers 20
=> 여분의 프로세스가 20 이상이면 강제로 죽입니다.

StartServers 20
=> 아파치가 시작할때 띄우는 프로세스 숫자입니다.

==> 여기서 중요한 점은 아파치 프로세스 하나가 하나의 request를 처리한다는
점입니다. 그리고 keepalive되어 있으면 종료되고나서 timeout 만큼 keepalive되어
다른 접속을 받아 들이지 않습니다. 여분의 프로세스가 없는 상태에서 새로운
request가 들어오면 새로운 child process가 생성되어 접속을 받아들입니다.
순간적으로 100 request가 들어오면 100개가 생기겠죠.. 그러다가 100개가
전부 여분(spare)가 되어버리면 maxspare 이상의 프로세스는 소멸되고요..
그러니까 startup이 minspareservers보다 작으면 시작하자마자 프로세스가
더 생성이되고.. 시작이 max보다 많이 크면 시작하자마자 그만큼은 죽이겠죠...

MaxClients 512
=> child process가 여기까지 생성이 됩니다. 여기서 정한 이상의 접속은
받아 들일수 없습니다. 아파치 child process 1개가 메모리를 3~4메가 정도
먹으니까.. 이 숫자는 전적으로 램 싸움입니다..

MaxRequestsPerChild 10000
=> 하나의 차일드 프로세스가 처리하는 리퀘스트 숫자입니다. 한번 뜨면
저 만큼의 접속을 저리하고 소멸됩니다. 0 으로 설정하면 무한대입니다.

Port 80
=> 말이 필요 없겠죠?

DocumentRoot "/usr/local/apache/htdocs"
=> index.html 이 위치하는 디렉토리 입니다.

(Directory />
Options FollowSymLinks
AllowOverride None
(/Directory>
=> 이걸 하는 이유는 htdocs 이외의 다른 시스템 디렉토리에 접근하지
못하도록 하기 위함입니다.

ErrorDocument 404 /404.shtml
ErrorDocument 500 /500.shtml
=> 404 에러와 500 에러의 메시지를 따로 만들어서 보여줍니다.
파일을 찾지 못했습니다.. 이런 화면을...

CustomLog "|/usr/local/sbin/cronolog --symlink=/usr/local/apache/logs/access_log /usr/local/apache/logs/access_log.%y%m%d"
=> 좀 길게 썼는데.. 아파치 홈페이지에 가면 cronolog라는 프로그램이 있는데..
이렇게 써주면 access_log.010224 이런식으로 1일 단위로 로그를 쪼개줍니다.
로그 파일이 큰 사이트라면 상당히 유용하겠죠... 로그 백업할때도 편하고....

ServerSignature Off
=> 에러 메시지에서 서버 이름 안남기는 겁니다.
apache 1.3.17 www.aaa.com 머머머.. 이런식으로 에러 나오는거 안나오게..