KeepAlive

2014.07.03 00:58

소울 조회 수:9588


   

  • KeepAlive 설정 시 주의사항

       

    • Client 수가 많을 경우, 상당히 민감하게 작용하는 부분이므로 신중히 설정해야한다.
    • 보통 단발성 요청들이 많을 경우, KeepAlive를 Off하는 것이 좋을 수도 있다.

      허나, KeepAlive를 사용하면 웹브라우저상에서의 체감속도는 빨라진다.

         

    • 접속자가 많지만 메모리가 충분하다 :On

      접속자가 많지만 메모리 여유가 없다 : Off

      접속자가 적고 메모리가 충분하다 : On

      접속자가 적지만 메모리 여유가 없다 : Off

         

      ("메모리가 충분하다"의 의미 : full memory 상태 혹은 그 미만이며, swap 메모리를 사용하지 않고 있는 상태)

         

    • Apache HTTP Server 가 multiprocess(woker) 일경우 Keep Alive 기능이 지원되지 않는다.

         

         

  • Apache MPM의 Prefork 방식과 Keep-Alive 의 관계 (개인적인 견해)

    1개의 클라이언트가 연결 수립 후 Keep-Alive가 on으로 설정되어 세션 유지상태가 되면 자식프로세스 1개가 생성된다.

    이때 Prefork 방식에서의 서버가 최대수용 할 수 있는 클라이언트 수 설정인 MaxClients 와

    서버 프로세스의 최대 허용 개수인 ServerLimit가

    Keep-Alive 설정 중 지속성 접속 시간 동안 처리할 수 있는 최대 요청 개수 설정인 MaxKeepAliveRequest과 연관성이 있다.

    ( Multiprocess 방식인 Worker 는 1개의 스레드에서 다수의 프로세스를 처리하니 Keep-Alive 기능을 지원하지 않는다. )

       

       

    ---------------------------------------------------------------------------------------------------------------------------------------

       

  • Apache Keep-Alive 설정

       

       

     

    ● HTTP 서비스 (apache)

     

    1. HTTP 서비스와 apache 개요

     

    1) HTTP (Hyper Text Transter Protocol)

    (1) 웹이라 불리는 인터넷 서비스는 HTTP 프로토콜을 사용

    (2) 현재 인터넷에 있는 웹 서버의 수는 무한함

    (3) 리눅스로 웹 서버를 구축하는 방법

    (4) 리눅스로 웹 호스팅을 위한 가상 웹 서버 만들기

    (5) 웹 서비스에 필요한 프로그램과 사용방법

     

    2) apache 웹 서버

    - 1995년 NCSA HTTPD 1.3버전을 기반으로 제작

    - 초기 (A PatCH server)의 약자 조합으로 단지 패치된 서버였지만 현재 인터넷 웹 서버 중

    에서 최고 인기 소프트웨어

    - 전체 웹 서버 시장에서 약 50%가 넘는 높은 점유율

    -특징

    * 소스코드 open (수정 및 배포가 자유로움 )

    * 다양한 플러그인과, 높은 성능, 안정성, 호환성

     

    3) 버전 분류

    (1) Apache 1.3.x 버전

    - Perofork 방식 (fork과정을 미리 함 ) 을 사용

    -Perfork 최대 수치 = 최대 동시 접속량 ( 문제점!!)

    (2) Apache 2.x 버전

    -Prefork & thread 지원

    -2. 0. x, 2. 2. x

     

    4) 아파치 패키지의 설치 여부 확인

    - rpm, yum 명령어로 설치 여부를 확인

     

    2. 웹 서버의 실행 및 구조, 전역설정

    1) 아파치 웹 서버 http의 실행 스크립트

       

     

    2) 디렉터리 구조

    - /etc/http : http 기준 디렉터리

    - /etc/http/conf , /etc/http/conf, d : 설정파일, 추가 설정파일

    - /etc/http/logs : 로그가 기록되는 디렉터리

    - /etc/httpd/modules : 웹 서버 모듈 디렉터리

    - /etc/httpd/run : PID 정보를 기록할 디렉터리

     

    3. 전역설정

     

    1) 전역설정(global configuration)

    - 서버가 읽을 모듈이나 포트번호, 디렉터리 구조 등을 설정

     

    2) 설정 바꾼 뒤 웹 서버 재 시작 전 문법 검사

       

       

    -http - t로 http,conf의 설정 테스트

     

    3) 서버 정보 공개 수준 : ServerTokens

    (1) ServerTokens <ProdlminIOSIFull >

    -prod ( 가장 적음 : 웹 서버의 종류인 Apache만 공개

    -MIN : 웹 서버의 종류와 버전까지 공개

    -OS : 웹 서버의 종류, 버전, 운영체제까지 공개

    -full (제일 많음 ) : 모든 정보와 사용된 모듈 등을 공개

    (2) 서버 공개 수준 예

    -os 레벨의 http 정보 공개

     

    4) 서버 루트 디렉터리 및 pid 파일 : serverRoot, Pidfile

    (1) ServerRoot " /etc/http"

    -아파치 웹 서버의 디렉터리 구조가 시작되는 기준 위치

    - rpm 패키지로 배포되는 경우 설정파일이 /etc/http/conf에 위치

     

    (2) PidFile run.httpd,pid

    -아파치 서버가 시동될 때 자신의 프로세스 고유 번호를 기록할 파일의 위치를 기록

    -PidFile 파일 위치는 절대 경로, 상대 경로 모두 가능

     

    5) 타임아웃 설정 : Timeout

    (1) timeout 120

    -접속 후 아무런 송수잔이 없을 때 timeout에서 지정한 시간이 지나면 연결 해제

    (2) 설정하는 이유 ( 필요성 )

    -대용량 접속으로 인한 지연 발생시 서버측의 정상화를 위해 서버측에서 먼저 접속을 해

    제하도록 함

    -DOS attack

    (3) 5~30초 설정

     

    6) Keep Alive 기능 : KeepAlive, MaxKeepAliveRequest, KeepAliveTimeout

    (1) 기능

    - 지속성 연결의 사용여부, 리퀘스트 제한, 타임아웃

    (2) 필요성

    - 잦은 소켓의 생성 파괴로 인한 오버 헤드 제거

    (3) 초기 HTTP 프로토콜

    - 기본 비지속성 연결 ( 문서 요구 시 통신 연결을 만들고, 전송 후에는 연결을 해체)

    - 초기 HTML 문서는 1~2개의 객체만 사용

    - 현재 HTML문서는 복수의 객체로 이루어짐

    (4) KeepAlive가 Off인 경우

     

       

     

    (5) 초기 HTTP 프로토콜 방식의 문제점

    - 현재 웹 페이지 무수히 많은 객체(파일) 존재

    - 많은 TCP 연결 사용 (오버 헤드 )

    (6) 해결책

    - 지속적 연결 : HTTP KeepAlive

    (7) KeepAlive 의 문제점 (2가지)

    - 타임 아웃에 따른 지연 문제

    * 지속성 연결을 언제까지 지속해야 하는지에 대한 문제

    * 무조건 일정 시간 동안 기다려야함

    * 결혼 적으로 모든 접속에 일정 시간이 잠복 됨

    -DoS 공격 문제

    * DoS 공격의 목표가 될 수 있음

    * 최대한 시간을 끌면서 한 번 씩 문서를 요청 할 경우

    (8) KeepAlive 의 설정

    - 설명 : KeepAlve 지시자는 Keep alive 의 on/off를 지정하고 만일 on 상태라면 , 클라

    이언트가 네트워크 연결을 만들고 데이터를 요청하여 서비스해준 뒤에 연결을 해체하지 않고

    KeepAliveTimeout 이내에서 MaxKeepAliveRequset를 넘지 않는 누적 요청이 있다면

    연결을 재사용하도록 합니다.

    (9) MaxKeepAliveRequest : 지속성 접속 시간 동안 처리할 수 있는 최대 요청 개수

    - 높은 성능을 내기 위해서 높은 값 (Dos 공격의 소지 )

    - 1~2초가 적당

     

    7) Prefork 모델의 서버 풀 조정

    (1) 아파치의 서버 풀 조정 방식

    - prefork 방식 (1.3.x 버전에서 사용)

    - thread 방식 (2.x 버전에서 사용)

    (2) prefork 방식 설정

    - StartServers : 초기 시작할 서버 프로세스의 개수

    - MinSpareServers : 예비 프로세스의 최소치

    - MaxSpareServers : 예비 프로세스의 최대치

    - ServerLimit : 서버 프로세스의 최대 허용 개수

    - MaxClients : 클라이언트의 최대 접속 허용 개수

    - MaxRequestsPerChild : 한 개의 서버 프로세스(자식)가 처리할 최대 누적 요청수

    (3) apache는 주기적으로 서버 풀을 검사함

    - 검사 이유 : 몇 개의 서버가 요청 대기 상태(아무일 않하는 상태)인지 점검

    - MinSpareServers ~ MaxSpareServers 개수를 유지하도록 조정

    - 전체 프로세스의 개수는 ServerLimit를 넘지 못함

    - prefork 방식은 "ServerLimit = MaxClients"

    * 이유 ? Prefork 방식은 한 개의 프로세스가 한 개의 클라이언트를 처리하기 때문!

    [출처] Keep-Alive|작성자 창수