Apache2.4.x 버전부터는 APR 과 APR-util을 별로도 설치하여야 한다. 하위버전에서는 설치파일에 포함되어 있었으나 버전 업이 되면서 삭제되어 configure를 실행하면 아래와 같은 에러메시지를 발생하면서 종료된다.

Configuring Apache Portable Runtime library ...

Checking for APR... no
Confgirue: error: APR not found. Please read the documentation

http://apr.apache.org/ 에서 다운받아 설치함



*APR(Apache Portable Runtime) 설치

$ wget http://mirror.sdunix.com/apache//apr/apr-1.4.6.tar.gz
$ tar xvf apr-1.4.6.tar.gz
~/apr-1.4.6$ ./configure
~/apr-1.4.6$ ./make
~/apr-1.4.6$ ./sudo make install




*ARP-Util 설치

$ wget http://apache.tt.co.kr//apr/apr-util-1.4.1.tar.gz
$ tar xvf apr-util-1.4.1.tar.gz
~/apr-util-1.4.1$ ./configure --with-apr=/usr/local/apr
~/apr-util-1.4.1$ make
~/apr-util-1.4.1$ sudo make install


Apache 재설치시 Error 발생.
configure: error: pcre-config for libpcre not found.PCRE is required and available from http://pcre.org/




*PCRE(Perl Compatible Regular Expressions) 설치

$ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.30.tar.gz
$ tar xvf pcre-8.30.tar.gz
~/pcre-8.30$ ./configure
~/pcre-8.30$ make
~/pcre-8.30$ sudo make install

*Apache 2.4.x 설치
$ wget http://apache.cs.utah.edu//httpd/httpd-2.4.2.tar.gz
$ tar xvf httpd-2.4.2.tar.gz
~/httpd-2.4.2$ ./configure --prefix=/home/www/apache2 --enable-module=so --enable-mods-shared-all --enable-so --enable-rewrite --enable-sll

~/httpd-2.4.2$ make
~/httpd-2.4.2$ sudo make install



~/apache2/bin$ ldd httpd
linux-gate.so.1 => (0xb779b000)
libpcre.so.1 => not found ------------------------------------> problem
libaprutil-1.so.0 => /usr/local/apr/lib/libaprutil-1.so.0 (0xb775a000)
libapr-1.so.0 => /usr/local/apr/lib/libapr-1.so.0 (0xb7728000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb76f8000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7553000)
libexpat.so.0 => /usr/local/apr/lib/libexpat.so.0 (0xb752a000)
libcrypt.so.1 => /lib/i386-linux-gnu/libcrypt.so.1 (0xb74f9000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb74f3000)
/lib/ld-linux.so.2 (0xb779c000)




~/.profile 에 export LD_LIBRARY_PATH=/usr/local/lib 를 추가

~/apache2/bin$ ldd httpd
linux-gate.so.1 => (0xb779b000)
libpcre.so.1 => /usr/local/lib/libpcre.so.1 (0xb777c000) ---------- 라이브러리를 찾아옴
libaprutil-1.so.0 => /usr/local/apr/lib/libaprutil-1.so.0 (0xb775a000)
libapr-1.so.0 => /usr/local/apr/lib/libapr-1.so.0 (0xb7728000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb76f8000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7553000)
libexpat.so.0 => /usr/local/apr/lib/libexpat.so.0 (0xb752a000)
libcrypt.so.1 => /lib/i386-linux-gnu/libcrypt.so.1 (0xb74f9000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb74f3000)
/lib/ld-linux.so.2 (0xb779c000)



/etc/sudoers 파일을 수정하여 root 계정이 아닌 다른 계정으로 Apache 실행하기

# User privilege specification
root ALL=(ALL:ALL) ALL
www ALL=/home/www/apache2/httpd ------ www 계정만이 httpd 를 sudo 를 통한 실행 권한을 가짐



*sudo 실행시에 LD_LIBRARY_PATH 를 적용시키기

/etc/ld.so.conf.d$ ls -alrt
합계 24
-rw-r--r-- 1 root root 44 9월 11 2010 libc.conf
-rw-r--r-- 1 root root 108 3월 7 06:50 i686-linux-gnu.conf
lrwxrwxrwx 1 root root 40 5월 29 01:10 i386-linux-gnu_GL.conf -> /etc/alternatives/i386-linux-gnu_gl_conf

/etc/ld.so.conf.d$ cat i386-linux-gnu_GL.conf
/usr/lib/i386-linux-gnu/mesa


i386-linux-gnu_GL.conf 파일에 라이브러리 패스를 추가

/etc/ld.so.conf.d$ cat i386-linux-gnu_GL.conf
/usr/lib/i386-linux-gnu/mesa
/usr/local/lib

 

출처 :  http://it-korea-well.tistory.com/

 


MPM : Multi-Processing Modules, MPMs (다중 처리 모듈)

- 여러 방식이 존재하지만, 대표적으로 Prefork 와 Worker 방식을 많이 사용함.

Prefork

- 쓰레드가 한개의 자식 프로세스를 여러개 사용하며 각 프로세스는 한번에 한 연결을 담당

- worker보다 좀 더 많은 메모리를 사용함

- 프로세스간 메모리를 직접 공유하지 않으므로, 메모리 공간이 독립적이어서 안정적임

 

 

 

 

 

 

설정 예
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>


옵션 설명
StartServer
아파치 구동시에 자식 프로세스 개수 지정

MinSpareServersMaxSpareServers
부하가 적어서 MinSpareServers 개수 보다 적었을 경우 최소한 이 개수 만큼 유지하려고 아파치가 노력하고
부하가 증가하여 프로세스 개수가 많아질 경우에 MaxSpareServers 개수 이하로 줄이려고 아파치는 노력한다.
즉, 절대적인 수치가 아니다.

MaxClient
초기 시작시 실행가능한 최대 아파치 자식 프로세스의 개수를 지정
*worker방식의 MaxClient 와는 전혀 다른 의미임.

MaxReqeustPerChild
클라이언트들의 요청 개수를 제한. 만약 자식 프로세스가 이 값만큼의 클라이언트 요청을 받았다면 이 자식 프로세스는 자동으로 죽게 된다. 0 일 경우엔 무한대

 

 

 

 

Worker

- 자식 프로세스들이 각각 여러 쓰레드를 사용하며, 각 쓰레드는 한번에 한 연결을 담당

- Prefork보다 메모리 사용량이 적음. 통신량이 많은 서버에 적절

- 쓰레드 간에 메모리 공간을 공유함. 리소스 경합이 발생하지 않도록 주의 필요.

 

 

 

 

설정 예
<IfModule mpm_worker_module>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>

   

옵션 설명
StartServers
시작시에 생성되는 서버 프로세스의 개수

MaxClient
동시 연결가능한 클라이언트의 최대 개수.

MinSpareThreads
최소 thread 개수

MaxSpareThreads
최대 thread개수

ThreadPerChild
개별 자식 프로세스가 지속적으로 가질 수 있는 Thread의 개수

MaxRequestPerChild
자식 프로세스가 서비스할 수 있는 최대 요청 개수

 

 

 

 

 

 

* 확장성이 필요한 사이트는 worker방식을 택하고, 안정성과 오래된 소프트웨어와 호환성이 필요한 사이트는 Prefork를 사용하기도 한다.

* Linux의 경우, Prefork 방식이 Default이며, Worker방식을 사용하기 위해서는 설치시에 -with-mpm=worker 옵션을 주어야 한다.

  ex) ./configure --prefix=/home/paint/apache-2.2.15 --enable-mods-shared=all --enable-module=so --enable-so  --with-mpm=worker

Posted by 빼인트

+ Recent posts