Apache httpd 기초


  1. 소개

    • 아파치 웹서버

    • 장점:
      • 오픈 소스 이다
      • 풍부한 자료와 경험 많은 개발자와 운영자가 있으므로 손 쉽게 접근할 수 있다.
      • 모듈 기반의 확장성을 제공하여 웹서버의 기능을 확대할 수 있다
      • PHP, Python 같은 스크립트 언어로 된 어플리케이션을 효율적으로 구동할 수 있다
      • 리버스 프록시 기능을 사용하면 다양한 어플리케이션의 게이트 웨이로 사용할 수 있다.
  2. 설치

    • 환경:
      • centos 6.9
      • apache httpd 2.4.27
    • 설치 스크립트

      APACHE_VER=2.4.27
      APR_VER=1.5.2
      APR_UTIL_VER=1.5.4
      PREFIX=/apache
      
      # 필요한 사전 라이브러리 설치
      yum -y install wget make gcc bzip2 pcre-devel openssl-devel
      
      # 아파치 라이브러리 다운로드
      wget http://mirror.navercorp.com/apache/httpd/httpd-${APACHE_VER}.tar.bz2
      wget http://mirror.navercorp.com/apache/apr/apr-${APR_VER}.tar.bz2
      wget http://mirror.navercorp.com/apache/apr/apr-util-${APR_UTIL_VER}.tar.bz2
      
      # 라이브러리 압축풀기
      tar xvf httpd-${APACHE_VER}.tar.bz2
      tar xvf apr-${APR_VER}.tar.bz2
      tar xvf apr-util-${APR_UTIL_VER}.tar.bz2
      
      mv apr-${APR_VER} httpd-${APACHE_VER}/srclib/apr
      mv apr-util-${APR_UTIL_VER} httpd-${APACHE_VER}/srclib/apr-util
      
      # httpd 설치
      mkdir -p $PREFIX
      cd httpd-${APACHE_VER}
      ./configure --prefix=${PREFIX} --enable-ssl
      CPU_CORE=$(lscpu | awk '/^CPU\(s\):/ {print $NF}')
      make -j${CPU_CORE}
      make install
      cd -
      
      # profile 등록
      sudo echo "export PATH=${PREFIX}/bin:\$PATH" >> /etc/profile
      source /etc/profile
      
  3. 설정파일

    • ./conf/httpd.conf 소개

      ServerRoot "/etc/httpd"
      이 지시자는 Apache의 홈디렉토리를 지정하며 절대경로로 지정한다. 이후에 나오는 대부분의 경로(PATH)들은 이 경로를 루트로 한 상대경로로 지정이 된다.
      
      PidFile run/httpd.pid
      서버가 시동할때 자신의 프로세스 고유 번호를 기록할 파일위치이다.
      
      Timeout 300
      클라이언트의 요청에 의해 서버와 연결이 되었을 때 클라이언트와 서버간에 아무런 메세지가 발생하지 않았을 때 타임아웃시키고 연결을 끊을 시간을 초단위로 설정한다. 다시말해, 홈페이지에 접속한 사용자가 특정페이지를 로딩한 후에 다음 연결작업(웹페이지 링크 클릭등)을 하지 않고 여기서 지정한 시간동안 머물게 되면 그 사용자와 Apache 프로세스와의 연결이 끊어지게 된다. 한참후에 다시 사용자가 페이지로딩을 하였을 때에는 다른 Apache 프로세스가 요청을 처리하고 서비스하게 된다. 이 값은 보통 300초로 지정한다. 네트웍의 속도가 낮을수록 수치값은 높게 설정하는 것이 좋다.
      
      KeepAlive On
      Apache의 특정 한 프로세스가 특정 사용자의 지속적인 요청작업들을 계속해서 처리하도록 허용할 것인가 아닌가에 대한 여부를 설정한다. 즉, 한 방문자가 홈페이지에 접속하여 다른 여러페이지들을 계속해서 보게될때 그 방문자의 지속적인 다른 요청들을 한 프로세스가 계속해서 처리하도록 할 것인가를 결정하는 지시자이다.
      
      MaxKeepAliveRequests 100
      KeepAlive의 값이 On일 경우에 유효한 값으로, 하나의 프로세스가 특정방문자의 요청을 계속해서 처리할때 지정한 횟수만큼만 처리한다. 프로세스가 이 횟수를 넘어서면 그 프로세스는 죽고 다시 다른 프로세스가 그 방문자의 요청을 처리한다.
      
      하나의 프로세스가 지속적으로 요청을 처리하다보면 메모리의 효율이 저하되고 이런 일이 계속 발생하면 전체적인 시스템 성능이 저하된다. 이 값이 0일경우 무한대로 요청을 처리하며 성능을 높이기 위해 높은 값을 추천한다.
      
      KeepAliveTimeout 2
      KeepAlive의 값이 On일 경우에 유효한 값으로, 설정한 시간(초)동안 요청이 없다면 그 연결을 끊기 위해 타임아웃 시킨다. 효율적인 프로세스관리와 자원낭비를 줄이기 위한 설정이다. 이 값이 낮다면 동시접속 수를 좀더 올리는데 공헌할 수 있다.
      
      <IfModule prefork.c>
      컴파일이 prefork 방식으로 되었을 경우의 설정, prefork 방식은 프로세스:쓰레드 = 1:1 방식
      
      StartServers       8
      Apache가 처음 시동될 때 자식프로세스를 몇 개로 시작할 것인가를 지정한다. 그러나 시스템의 부하율에 따라 MinSpareServers와 MaxSpareServers의 설정에 의해 합리적인 개수만큼 동적으로 생성되었다가 죽기도 한다.
      
      MinSpareServers    5 
      MaxSpareServers   20
      Apache의 성능향상과 빠른 응답속도를 위해 서비스대기 중인 프로세스를 만들게 되는데 이 대기 프로세스의 개수를 지정하는 지시어다. MinSpareServers에 지정한 값보다 적으면 대기 프로세스를 더 많이 만들게 되고, MaxSpareServers 보다 더 많으면 대기 프로세스를 줄인다. 절대적인 수치가 아니라 설정된 수치에 맞게 Apache가 노력하게 된다.
      
      ServerLimit      256
      MaxClients      256
      ServerLimit 지시어는 MaxClients가 생성할수 있는 최대 프로세스 값이다. 이 값은 Apache 2.2 버전대에 들어서면서 기본값은 256이나 최대 허용값은 20000으로 설정되어 있다. MaxClients는 최대 동접자수로 Apache 자식 프로세스의 최대값이 된다.
      
      MaxRequestsPerChild  4000
      Apache의 자식프로세스들이 생성할 수 있는 클라이언트들의 요청 개수를 제한하는 지시어다. 이 값만큼의 클라이언트 요청을 받았다면 이 자식프로세스는 자동으로 죽게된다. 이 값이 0으로 설정이 된다면 자식프로세스가 죽는일이 없다. 이 값을 적절히 설정함으로서 부하조절과 자원낭비를 어느정도 예방 할 수 있다.
      
      </IfModule>
      <IfModule worker.c>
      worker 방식으로 작동시의 설정, worker 방식은 프로세스:쓰레드 = 1:n 방식
      
      StartServers         4
      시작시에 초기화되는 서버 프로세스 갯수
      
      MaxClients         300
      동시 연결가능한 클라이언트의 최대 개수
      
      MinSpareThreads     25
      대기하고 있는 최소 스레드 갯수
      
      MaxSpareThreads     75
      대기하고 있는 최대 스레드 갯수
      
      ThreadsPerChild     25
      각각의 자식프로세스가 지속적으로 가질수 있는 스레드의 갯수
      
      MaxRequestsPerChild  0
      자식 프로세스가 서비스할 수 있는 최대 요청 갯수
      
      Listen 80
      시스템의 기본값 이외에 다른 IP 주소와 포트에 대해서도 연결할 수 있도록 해준다. 주로 가상호스트(Virtual Host)부분에서 기본 80번 이외에 다른 포트를 이용하여 가상호스트를 설정하고자 할 때에 필요하다.
      
      # Dynamic Shared Object (DSO) Support
      DSO 방식으로 컴파일된 Apache의 모듈을 적재. 모듈의 위치는 /etc/httpd/modules이며 이는 usr/lib64/httpd/modules의 심볼릭 링크이다.
      
  4. 실행

     $ /apache/bin/httpd -f /apache/conf/httpd.conf
    



Posted by 감각적신사
,