(주)누리웨어

화상연동/Web,APP 구축및서비스/LMS/평생교육/학점은행/기업교육/연수관리/설문구축/

Linux (centos)에 Apache HTTPD 2.2.29 install

기본설치

 

다운로드

http://httpd.apache.org/download.cgi#apache24

사이트에서

 

압축해제

필요한 파일 설치

 Apache2.4.x 버전 설치

기존의 apache2.4.x 버전부터는 apr과 apr-util을 별로도 설치하여야 합니다.
하위버전에서는 설치파일에 포함되어 있었으나 버전 업이 되면서 삭제되어
configure를 실행하면 아래와 같은 에러메시지를 발생하면서 종료됩니다.
Checking for APR… no
Confgirue: error: APR not found. Please read the documentation

소스 수정

 

 

설치(httpd-2.2.29)

MPM(worker)방식으로 설치

소스컴파일 및 설치


 


 

설치확인

HTTPD 실행

 

Service 설정

기존 HTTPD 삭제

#!/bin/sh
#
# Startup script for the Apache Web Server
#
# chkconfig: 345 85 15
# description: Apache is a World Wide Web server.
# processname: /app/httpd-2.2.29/bin/apachectl
# pidfile: /app/httpd-2.2.29/logs/httpd.pid
# config: /app/httpd-2.2.29/conf/httpd.conf
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the “License”); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an “AS IS” BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
# Apache control script designed to allow an easy command line interface
# to controlling Apache. Written by Marc Slemko, 1997/08/23
#
# The exit codes returned are:
# XXX this doc is no longer correct now that the interesting
# XXX functions are handled by httpd
# 0 – operation completed successfully
# 1 –
# 2 – usage error
# 3 – httpd could not be started
# 4 – httpd could not be stopped
# 5 – httpd could not be started during a restart
# 6 – httpd could not be restarted during a restart
# 7 – httpd could not be restarted during a graceful restart
# 8 – configuration syntax error
#
# When multiple arguments are given, only the error from the _last_
# one is reported. Run “apachectl help” for usage info
#
ARGV=”$@”
#
# |||||||||||||||||||| START CONFIGURATION SECTION ||||||||||||||||||||
# ——————– ——————–
#
# Source function library
. /etc/rc.d/init.d/functions
#
# the path to your httpd binary, including options if necessary
HTTPD=’/app/httpd-2.2.29/bin/httpd’
#
# pick up any necessary environment variables

if test -f /app/httpd-2.2.29/bin/envvars; then
. /app/httpd-2.2.29/bin/envvars
fi
#
# a command that outputs a formatted text version of the HTML at the
# url given on the command line. Designed for lynx, however other
# programs may work.
LYNX=”links -dump”
#
# the URL to your server’s mod_status status page. If you do not
# have one, then status and fullstatus will not work.
STATUSURL=”http://localhost:80/server-status”
#
# Set this variable to a command that increases the maximum
# number of file descriptors allowed per child process. This is
# critical for configurations that use many file descriptors,
# such as mass vhosting, or a multithreaded server.
ULIMIT_MAX_FILES=”ulimit -S -n ulimit -H -n
# ——————– ——————–
# |||||||||||||||||||| END CONFIGURATION SECTION ||||||||||||||||||||

# Set the maximum number of file descriptors allowed per child process.
if [ “x$ULIMIT_MAX_FILES” != “x” ] ; then
$ULIMIT_MAX_FILES
fi

ERROR=0
if [ “x$ARGV” = “x” ] ; then
ARGV=”-h”
fi

 

case $ARGV in
start|stop|restart|graceful|graceful-stop)
echo -n “$ARGV httpd : “
daemon $HTTPD -k $ARGV
echo
ERROR=$?
;;
startssl|sslstart|start-SSL)
echo The startssl option is no longer supported.
echo Please edit httpd.conf to include the SSL configuration settings
echo and then use “apachectl start”.
ERROR=2
;;
configtest)
$HTTPD -t
ERROR=$?
;;
status)
$LYNX $STATUSURL | awk ‘ /process$/ { print; exit } { print } ‘
;;
fullstatus)
$LYNX $STATUSURL
;;
*)
$HTTPD $ARGV
ERROR=$?
esac

exit $ERROR

서비스 등록

root]#chkconfig –add httpd

 

 

 

=========================================================

리눅스 멀티 프로세스

리눅스에서 Apache 멀티 프로세스에 관련된 모듈(MPM)에는 대표적으로 worker / prefork 두가지가 있습니다.

 방식

Prefork 방식 : 한 자식프로세스당 하나의 쓰레드를 사용하는 방법
기본 사용 메모리가 worker보다 높으며 프로세스 간 메모리를 공유하지 않는 독립 형태이므로 안정적임.
아파치 컴파일시 옵션 추가하지 않을경우 기본으로 이 모듈로 동작합니다.
Worker 방식 : 한 자식프로세스당 여러개의 쓰레드를 사용하는 방법
기본 사용 메모리는 prefork보다 낮으며 쓰레드 간에 메모리를 서로 공유함.
동시접속자가 많은 사이트에 적합합니다.

설정

원하는 모듈로 설치하기에 앞서 httpd-2.2.22 버전으로 테스트 하였습니다.
(httpd 1.x 버전은 prefork 방식만 가능하며 worker는 2.x부터 가능합니다.)
최대 동시접속자 수 2048로 설정할 경우 컴파일 하기 전 소스에서 수정을 합니다.
                                                                                                                                         

                                                                                                                                         

아파치설치폴더/server/mpm/prefork/prefork.c 파일에서
#define DEFAULT_SERVER_LIMIT 2048 (256 -> 2048로 변경)
아파치설치폴더/server/mpm/worker/worker.c 파일에서
#define DEFAULT_SERVER_LIMIT 32 (16 -> 32로 변경)
※ worker는 한 프로세스에 여러 쓰레드 방식이므로 프로세스 갯수와 쓰레드 갯수를 곱하여 최대접속자수를 설정합니다.
32 * 64 = 2048
#define DEFAULT_SERVER_LIMIT 32
#define DEFAULT_THREAD_LIMIT 64

컴파일옵션

컴파일 시 worker / prefork 구분하여 컴파일 옵션을 줍니다.
예) worker 경우
                                               

 

                                               
prefork의 경우엔 따로 옵션을 주지 않거나 with-mpm=prefork 로 주고 진행하면 됩니다.

 

접속설정

설치 후 컨피그 설정에서 최대접속자 설정을 합니다.
vi 아파치설치경로/conf/extra/httpd-mpm.conf
설치한 모듈을 제외한 다른모듈 부분은 전부 주석처리하여도 됩니다.
worker 모듈의 경우
StartServers : 아파치 시작시 생성되는 기본 프로세스 갯수
ServerLimit : 최대 실행가능한 프로세스 갯수
MaxClients : 최대동시접속자수 (프로세스 * 쓰레드, 소스에서 설정한 최대동시접속자수까지 가능)
MinSpareThreads : 최소로 유지할 쓰레드 갯수
MaxSpareThreads : 최대로 유지할 쓰레드 갯수
ThreadsPerChild : 하나의 자식프로세스가 가질 수 있는 쓰레드 갯수
MaxRequestsPerChild : 자식프로세스가 살아있는동안 요청을 받을 갯수 (0은 무한대, 메모리누수의 경우 메모리 사용양 제한가능)
prefork 모듈의 경우
                 
StartServers : 아파치 시작시 생성되는 기본 프로세스 갯수
MinSpareServers / MaxSpareServers : 아파치 실행중에 유지할 최소/최대 프로세스의 갯수
(worker와 달리 절대적인 수치는 아니며 서버로 요청이 많아지면 그만큼 갯수가 초과될수 있음)
MaxClients : 아파치 시작시 최대로 실행할 자식프로세스의 갯수
프로세스나 쓰레드 갯수 설정은 현재의 서버사양과 동시접속자수를 고려하여 설정하면 됩니다.
5.
현재 설치되어있는 아파치의 mpm 확인할 경우 httpd -V 명령어로 확인가능합니다.
Server MPM 부분에서 Prefork인지 Worker인지 알 수있습니다.
또한 httpd -l 로 확인가능합니다.
6.
이벤트 등으로 동시접속자 증가로 인하여 사이트 응답이 매우 느릴경우 아래와 같은 방법으로 속도향상이 가능합니다.
 a. 아파치 설정에서 KeepAlive를 Off로 설정하면 응답후 연결유지를 하지않고 바로 연결을 끊어버리므로 속도향상에 효과적입니다.
 b. prefork 모듈 사용중에 메모리 부족 현상을 겪을 경우 worker 방식으로 변경하면 메모리와 CPU 소비가 약간 줄어듭니다.
 변경하더라도 메모리가 부족할 경우 물리적인 메모리를 증설하여야합니다.
 c. 아래의 명령어로 현재 요청으로 연결된 갯수를 확인하여 최대 동시접속자 수가 너무 적을 경우 httpd-mpm.conf 를 적절하게 수정하여야 하며,
 설정보다 최대 동접자수가 적을 경우 소스에 수정을 하고 재컴파일 해야 됩니다. (DEFAULT_SERVER_LIMIT 값 수정)
 
 d. 동시접속자 수 제한을 풀었으나 서버 자체 사양의 한계로 버티지 못하여 서비스 자체가 다운될 경우,
 오히려 동시접속자 수 제한을 걸어서 서비스를 유지하는 방법을 이용하여야 합니다.
worker 방식으로 변경하더라도 한개의 요청에 대한 응답속도가 빨라지지는 않습니다.
동시접속자와 상관없이 지연시간이 발생할경우 CDN 서비스를 이용하시는게 적합합니다.

댓글 남기기