System/CentOS | Ubuntu

[CentOS 6] APM Setup - Apache

jykim23 2019. 7. 8. 15:54

 

 

 

목차

 

0. 개요

1. apache

2. mysql

3. php

4. tomcat

 

 

 

 

들어가기 앞서 CentOS6 버전으로 테스트 하였습니다. 

 

혹시 저와같이 리포지토리 변경으로 힘들어하실 분들을 위해 명령어 공유합니다.

 

 

# sed -i -e "s/^mirrorlist=http:\/\/mirrorlist.centos.org/#mirrorlist=http:\/\/mirrorlist.centos.org/g" /etc/yum.repos.d/CentOS-Base.repo

 

# sed -i -e "s/^#baseurl=http:\/\/mirror.centos.org/baseurl=http:\/\/vault.centos.org/g" /etc/yum.repos.d/CentOS-Base.repo

 

 

 

  • 필요 라이브러리 설치

 

# yum -y install make gcc gcc-c++ autoconf automake libtool pkgconfig findutils zlib-devel openldap-devel openssl-devel libxml2-devel freetype-devel libtool-ltdl-devel expat-devel

 

설치 완료

 

더보기


아파치 라이브러리
# yum -y install make gcc gcc-c++ autoconf automake libtool pkgconfig findutils zlib-devel openldap-devel openssl-devel libxml2-devel freetype-devel libtool-ltdl-devel expat-devel

여기서 잠깐
-
소스를 컴파일한다는 의미는 프로그램 소스(대개는 C언어로 만들었음) gcc 컴파일러로 직접 컴파일해서 사용한다는 의미
-
결과로 ‘Makefile’이라는 파일이 만들어진다.

Autotools
- autoconf automake, libtool
도구들로 구성되어 있는 Build system 이다.
-
대부분의 GNU 프로그램들은 Autotools를 사용해 Build 환경을 구성
-
사용자 입장에서는 다음의 명령어로 소스 패키지를 컴파일하고 설치할 수 있는데 이러한 빌드 환경을 제공 

- pkgconfig :
소스 코드로부터 소프트웨어를 컴파일할 목적으로 설치된 라이브러리를 조회하기 위해 통일된 인터페이스를 제공
- findutils 
 
지정한 기준에 맞는 파일을 찾고, 찾은 파일로 여러가지 동작을 실행하는 유틸리티 프로그램이 들어 있다.
 
이 패키지에는 ‘find, xargs’가 들어 있고 ‘locate’는 별도의 패키지로 분리되어 있다.
- zlib-devel :
모듈에서 gzip 압축을 사용하기 위해 zlib가 필요
- openldap-devel : TCP/IP
위에서 디렉터리 서비스를 조회하고 수정하는 응용 프로토콜
- openssl-devel :
범용 암호화 라이브러리, 전송계층보안(TLS, Transport Layer Security v1), 보안 소켓 계층(SSL, Secure Sockets Layer v2/v3)를 구현
- libxml2-devel : xml
을 파싱하기 위해 사용하는 라이브러리
 
파서(Parser)는 파싱(Parsing)을 수행하는 프로그램을 말하고, 파싱은 어떤 문장을 분석하거나 문법적 관계를 해석하는 행위를 말함
 
즉 프로그램을 컴파일하는 과정에서 특정 프로그래밍 언어가 제시하는 문법을 잘 지켜서 작성하였는지를 컴파일러가 검사하는 것을     의미
- freetype-devel :
폰트에 대한 정보를 추출하는 폰트 엔진
- libtool-ltdl-devel : GNU
빌드 시스템에서 나온 GNU 프로그래밍 도구이며 컴파일된 포터블 라이브러리를 만드는데 이용, 라이브러리 도구의 준말이며, libtool은 일반적으로 Autoconf Automake와 함께 쓰이며 이 두개의 도구도 GNU 빌드 시스템의 일부로 되어 있다.
- expat-devel : expat
를 가지고 xml 응용 프로그램을 개발하는데 필요한 라이브러리들과 파일들
- pcre-devel :
특정한 규칙을 가진 문자열의 집합을 표현하는 형식 언어이며, 정규 표현식은 문자열의 검색과 치환을 위해 사용
정규표현식에는 POSIX확장 형식(ereg함수)과 펄호환 형식(pcre함수)이 있는데 빠르고, 기능도 좋고 많이 사용
정규식을 사용하려면 우선 찾고자 하는 문자열의 패턴을 찾아 표현식으로 작성

 

 

동적공유객체(Dynamic Shared Object) 지원
아파치 설치 방식은 두 가지가 있다. 하나는 DSO (Dynamic Shared Object) 동적 모듈 적재 방식이고 하나는 Static Object 라고 하는 방식이다. DSO 방식은 아파치를 먼저 컴파일하고 다른 모듈들을 추가로 설치할 때 아파치를 다시 컴파일 하지 않고 모듈을 추가할 수 있다.
Static
방식은 모듈을 추가하려면 아파치를 다시 컴파일 해야 하는 번거로움이 있다.  Static 방식은 사용하는 모듈을 모두 적재한 다음 사용자의 요청이 있으면 바로 응답하므로 실행속도가 빠르지만, 아파치가 실행될 때 모든 모듈을 로드하므로 시스템의 자원을 많이 소모한다. 하지만 DSO방식은 사용자의 요청이 있을 때에 모듈을 로드하므로 Static방식보다는 느리지만, 시스템의 자원을 적게 소모하고 최근에는 하드웨어의 발전으로 수행 속도가 크게 차이 나지 않는다. 그래서 대부분 여러가지 장점이 있는 DSO방식으로 설치한다.

여기서 잠깐
-
아파치와 PHP 설치 방법에는 정적설치와 동적설치가 있다.
-
정적설치는 아파치에서 한번 configure 작업만하고 PHP설치가 완전히 완료되면 다시 아파치를 설치하는 방법
-
동적설치는 아파치 설치를 완전히 완료 후 PHP 설치를 완료하는 방법


APACHE 
Configuration
./configure --prefix=/home/httpd --enable-modules=so --enable-mods-shared=all --enable-modules=shared --enable-ssl --enable-rewrite –with-mpm=prefork

--prefix :
아파치가 설치 될 경로
--enable-modules=so : 동적설치하기 위한 옵션
--enable-mod-shared=all :
모든 아파치 모듈을 생성하는 옵션
--enable-modules=shared :
열거한 모듈들을 정적으로 링크, 즉 이 모듈들은 httpd 실행하면 언제나 사용 가능
--enable-
ssl : mod_ssl이 제공하는 SSL/TLS 기능을 사용
--enable-rewrite :
mod_rewrite가 제공하는 규칙기반 URL 조작 기능을 사용
--with-
mpm=prefork
: ssl모듈, rewrite모듈은 서버동작방식 prefork로 설치해야만 zend설치 가능

 

 

 

 

  • 라이브러리 소스 다운로드

 

 

apr, apr-util, httpd 라이브러리 소스를 다운로드 합니다.

 

# wget https://archive.apache.org/dist/apr/apr-1.6.3.tar.gz 
# wget https://archive.apache.org/dist/apr/apr-util-1.5.3.tar.gz 
# wget https://archive.apache.org/dist/httpd/httpd-2.4.9.tar.gz

 

구글링 팁! 

index of [파일명] 

 

 

  • 압축 해제

 

# tar zxvf 파일명

 

압축 해제

 

 

  • 라이브러리 이동

apr, apr-util을 이동합니다.

 

라이브러리 이동

 

 

  • 설정

# vi server/mpm/prefork/prefork.c  -> MPM prefork 방식으로 설시 수정

 

define DEFAULT_SERVER_LIMIT 2048 으로 수정

자식프로세스 기본값이 256, 서버 스펙에 따라서 적당히 늘려줍니다.

 

# vi server/mpm/worker/worker.c   -> MPM worker 방식으로 설치 시 수정

 

define DEFAULT_SERVER_LIMIT 40  (40 * 64 = 1280)  ->2560으로 높일 때

 

필자는 prefork로 설정하였습니다.

 

 

 

  • apache Configuration

./configure --prefix=/home/httpd --enable-modules=so --enable-mods-shared=all --enable-modules=shared --enable-ssl --enable-rewrite --with-mpm=prefork

 

 

 

오류 발생 #1

pcre-config가 없다고합니다.

아파치 설치중 에러: pcre 설치 레드햇 계열이라면 pcre-devel , 데비안 계열이라면 libpcre3-dev 설치합니다.

yum install -y pcre-devel

 

yum  install -y  pcre-devel

 

오류 발생 #2

 

Cannot use an external APR-util with the bundled APR

configure 옵션에 아래 줄을 추가합니다.

--with-included-apr

ex) ./configure --prefix=/home/httpd --enable-modules=so --enable-mods-shared=all --enable-modules=shared --enable-ssl --enable-rewrite --with-mpm=prefork --with-included-apr

 

 

오류 수정 후 다시 configure합니다.

 

완료한 캡처가 없습니다....

 

  • make && make install

컴파일 및 설치를 진행합니다.

 

# make -j 2

make의 j 옵션으로 더 빠르게 컴파일할 수 있습니다.

 

 

# make install

설치합니다.

 

설치는 오래 걸리지 않습니다.

 

 

  • 설치 확인

 

Apache 시작 전에 문법 검사를 합니다.

/home/httpd/bin/apachectl –t  -> syntax 검사

ServerName 설정

 

오류 발생이 없다면 넘어가주세요.

 

 

위와 같은 오류이면 httpd.conf 파일을 수정합니다.

 

# vi /home/httpd/conf/httpd.conf

주석 풀고 아무 값을 입력합니다.

 

 

Apache 문법 검사 및 시작합니다.

문법 검사 및 시작

 

프로세스 확인

ps -ef grep httpd

포트 확인

netstat -nlp grep 80

 

방화벽 추가

방화벽 추가

 

방화벽 재시작 및 방화벽 확인

iptables -nvxL

 

 

  • 접속 확인

 

성공!

 

  • prefork 설치 확인

/home/httpd/bin/httpd -V

 

 

 

  • prepork와 worker 차이 설명

 

# vi /home/httpd/conf/extra/httpd-mpm.conf

prefork 옵션

 

worker 옵션

 

더보기

<prefork 옵션 설명>
- StartServers : 아파치 시작시 생성되는 기본 프로세스 개수
-
MinSpareServers/MaxSpareServers : 아파치 실행 중에 유지할 최소/최대 프로세스의 개수(worker와 달리 절대적인 수치는 아니며 서버로 요청이 많아지면 그만큼 개수가 초과될 수 있음)
-
MaxClients : 아파치 시작시 최대로 실행할 자식프로세스의 개수(이 옵션을 가지고 최대 접속자수를 지정)
-
MaxRequestPerChild: 클라이언트들의 최대 요청갯수, 기본값은 0이며 무한대, 이 개수만큼 클라이언트로부터 요청을 받았다면 자식 프로세스는 자동으로 죽고 다시 생성, 아파치 서버가 자주 다운되거나 메모리 문제가 발생한다면 이 값을 조절하여 해결할 수 있다.

<worker
옵션 설명>
-
StartServers : 아파치 시작시 생성되는 기본 프로세스의 개수
-
ServerLimit : 최대 실행가능한 프로세스 개수
-
MaxClients : 최대동시접속자수 (프로세스 * 쓰레드 , 소스에서 설정한 최대동시접속자수까지 가능)
-
MinSpareThreads : 최소로 유지할 쓰레드 개수
-
MaxSpareThreads : 최대로 유지할 쓰레드 개수
-
ThreadsPerChild : 하나의 자식프로세스가 가질 수 있는 쓰레드 개수
-
MaxRequestPerChild: 클라이언트들의 최대 요청갯수, 기본값은 0이며 제한 없음, 이 개수만큼 클라이언트로부터 요청을 받았다면 자식 프로세스는 자동으로 죽고 다시 생성, 아파치 서버가 자주 다운되거나 메모리 문제가 발생한다면 이 값을 조절하여 해결할 수 있다.

두 방식의 속도 차이는 없다. worker 방식이 prefork에 비해 불안정적이다 라고 말하는 분들도 있다. 국내에서는 prefork 를 많이 사용하지만 외국에서는 worker 를 더 많이 사용하는 추세, 그리고 우분투 12.04 의 경우도 기본 패키지 설치방식이 worker로 변경

 

MPM(다중처리모듈, Multi Processing Module)
-
리눅스에서 보면 부모 프로세스, 자식 프로세스라는 말이 있다. 즉 아파치 웹 서버가 받아들이는 요청을 처리하기 위해 자식 프로세스에게 분배하는 방식

prefork 특징
-
쓰레드가 한 개의 자식 프로세스를 여러 개 사용하며, 각 프로세스는 한번에 한 연결을 담당
-
실행중인 프로세스를 메모리 영역까지 복제하여 실행하기 때문에 각 프로세스가 소비하는 메모리가 많다.
-
메모리를 공유하지 않고 독립적인 메모리를 할당하기에 안정적
-
메모리 소비가 많은 대신 응답 프로세스를 미리 띄어 놓고 클라이언트에서 요청이 오면 자식 프로세스가 응답하는 방식

worker
특징
-
한 자식프로세스 별로 여러 개의 쓰레드를 사용
-
쓰레드는 최대 64개까지 사용되며, 지정된 만큼의 프로세스와 각 쓰레드를 준비하여 요청을 받아들인다.
-
쓰레드간에 메모리를 서로 공유하여 사용하기에 prefork 방식보다는 메모리 소비가 적음
-
메모리를 공유하기에 하나의 쓰레드에 문제가 발생하면 해당 쓰레드에서 작업중인 모든 프로세스에서 문제가 될 가능성이 있다.

event
-
요청과 Keep Alive한 아파치 요청을 그대로 맺는 것이 아니라, 요청을 처리하는 쓰레드를 따로 두도록 하여 분산된 처리를 할 수 있게 하는 목적을 둠 2.4.x 버전부터 설정이 추가되었음  

Keep Alive
?
- Keep
Alive란 연결된 socketIN/OUTaccess가 마지막으로 종료된 시점부터 정의된 시간까지 access가 없더라도 대기하는 구조 즉 정의된 시간내에 access가 이루어진다면 계속 연결된 상태를 유지

Prefork Worker 방식이 차이점
1) WorkerPrefork에 비해 적은 메모리 사용한다.
2) Worker : 통신량이 많은 서버에 적절한 형태를 가진다.
3) Prefork : 안전하지 않은 제 3자가 만든 모듈을 사용할 수 있다.
4) Prefork : 디버깅이 빈약한 플랫폼에서 쉽게 디버깅 할 수 있다.
5) Worker‘ 와 ‘Prefork‘ 의 속도는 비슷하다.


 

 

 

'System > CentOS | Ubuntu' 카테고리의 다른 글

[CentOS 6] APM Setup - PHP  (1) 2019.07.08
[CentOS 6] APM Setup - Mysql  (0) 2019.07.08
[CentOS 6] APM Setup 개요  (0) 2019.07.08
[CentOS 7] 템플릿, 복사본 제작  (0) 2019.02.19
[CentOS 7] 설치 및 기본 설정, SSH  (0) 2019.01.07