강좌
클라우드/리눅스에 관한 강좌입니다.
자격증 분류

리눅스마스터1급 : 아파치 웹 서버 설치

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

리눅스마스터1: 아파치 웹 서버 설치

 

 

 

아파치(APACHE)는 오픈소스기반의 가장 높은 성능과 안정성을 보장하며 가장 많은 사람들이 사용하는 대표적인 웹 서버이다.

 

 

 

최근 netcraft.com에 따르면 최고 인기있는 100만개웹서버에서 사용하고있는 웹서버솔루션이 무엇인가를 조사한 결과 51.01%가 아파치(APACHE)를 웹서버로 사용하고있다고 한다.

 

 

 

(아래 도표 참조) 그만큼 아파치의 사용율과 신뢰도에 있어서 자타 인증을 받고 있다는 가장 확실한 증거일 것이다.

 

 

 

 

ae605a8902fc6a456085638e2d1b5e83_1686817227_1894.png
 

 

ae605a8902fc6a456085638e2d1b5e83_1686817245_9547.png
 

 

 

 

아파치 웹서버 단독으로 사용하기 보다는 위 그림과 같이 Apache, PHP, MySQL(이하 APM)을 연동하여 사용한다.

 

 

 

Apache는 웹서버이며, PHP는 웹에서 동적인 컨텐츠를 생성하기 위한 스크립트 언어이다.

 

 

 

MySQL은 데이터를 저장하기 위한 DBMS이다.

 

 

 

ApachePHP의 연결 관계는 ApacheDSO(Dynamic Shared Objects) 방식으로 연결된다.

 

 

 

이는 Apache프로그램이 동적으로 필요시 PHP모듈을 불러 사용하는 형태이다.

 

 

 

ApachePHP가 분리되어 있기 때문에 PHP의 버전 및 기타 이유로 변경시 PHP만 다시 설치하는 것이 가능하다.

 

 

 

 

PHPMySQLMySQL의 클라이언트 라이브러리를 PHP에서 불러 들어와 사용하는 형태이다.

 

 

 

PHP 설치 과정에서 MySQL의 클라이언트 라이브러리 파일을 사용한 PHP만의 클라이언트 라이브러리를 만들고 이를 이용하여 MySQL에 접속하게 된다.

 

 

 

PHP 버전에 따라 mysqli 등 다양한 라이브러리를 지원하며, MySQL 서버와 연결하기 위해서는 tcp/ip socket 을 사용하여 접속 할 수 있다.

 

 

 

기본적으로 tcp/ip에서는 TCP 3306 포트를 사용하며, socket/tmp/mysql.sock 파일을 이용하여 PHP에서 MySQL 서버에 접속 할 수 있다.

 

 

 

 

 

ae605a8902fc6a456085638e2d1b5e83_1686817276_5108.png
 

 

 

 

위 그림은 APM 동작 구조를 그림으로 나타낸 것이다.

 

 

 

클라이언트로부터 요청이 들어오면 웹서버인 Apache에서 요청되는 파일의 확장자를 분석한다.

 

 

 

웹서버 설정에 따라 “.php .htm .html .phtml .ph .inc .phps” 확장자를 가지는 파일은 PHP에 의해서 인터프리팅된다.

 

 

 

phps 파일은 소스를 보여주는 용도로 사용된다.

 

 

 

만약 PHP소스에 DB 연결 함수가 사용되었다면, MySQL에 접속되는 구조로 되어 있다.

 

 

 

 

기타파일 jpg, gif, pdf, doc, css, js 등의 일반적인 파일은 Apache만으로 처리되며, PHP모듈을 사용하지 않는다.

 

 

 

1) 아파치를 설치하는 여러가지 방법

 

 

아파치 웹 서버를 설치하는 방법은 여러가지 이며, 대부분의 리눅스 배포판에 패키지 형태로 제공한다.

 

 

 

배포판에서 제공하는 아파치 웹 서버를 설치하는 방법은 다음과 같다.

 

 

 

 

Redhat 계열 배포판에서의 아파치 웹 서버 설치

 

 

 

 

yum install httpd

 

 

 

 

 

 

Debian 계열 배포판에서의 아파치 웹 서버 설치

 

 

 

 

apt-get install apache2

 

 

 

 

 

 

 

배포판에서 제공하는 아파치 웹서버 설치 방법은 패키지 업데이트 도구로 쉽게 설치, 삭제, 업데이트를 할 수 있다는 장점이 있다.

 

 

 

그렇지만 배포판에서 제공하지 않는 메이저 버전의 아파치 웹서버를 설치하기는 어렵고, 소스 수정, 컴파일 옵션을 통한 최적화 등은 어려운 단점이 있다.

 

 

 

이러한 장단점을 해결하기 위해 다양한 버전을 Apache, PHP, MySQL을 연동 최적화 설치할 수 있는 툴을 제공하는 배포판도 있다.

 

 

 

 

2) 설치전 준비사항

 

 

아파치를 설치하는 방법은 여러가지 이다.

 

 

 

대부분의 배포판에는 패키지 형태(rpm, dep)로 아파치를 배포한다.

 

 

 

배포판과 함께 제공되는 아파치와 연동되는 PHP, MySQL의 버전은 배포판에 따라 정해진다.

 

 

 

/하위 버전의 아파치, PHP, MySQL의 조합을 이루기 위해서는 컴파일 설치를 해야 하는 경우가 많다.

 

 

 

웹 프로그램의 요구사항에 맞게 컴파일 설치하는 방법을 다뤄 보겠다.

 

 

 

먼저 소스코드를 다운로드 한다.

 

 

 

 

 

Apache : http://httpd.apache.org

PHP : http://www.php.net

MySQL : http://www.mysql.com

 

 

 

 

ae605a8902fc6a456085638e2d1b5e83_1686817297_6937.png
 

아파치홈페이지

 

ae605a8902fc6a456085638e2d1b5e83_1686817318_3972.png
 

PHP홈페이지

 

 

 

ae605a8902fc6a456085638e2d1b5e83_1686817333_586.png
 

MySQL홈페이지

 

 

 

소스코드를 다운로드 완료 하였다면 설치를 위해 설치 작업 공간으로 이동하자, 리눅스의 사용자 프로그램은 "/usr/local"아래에 설치하는 것이 대부분이며, 설치된 프로그램의 소스는 "/usr/local/src"에 두는 것이 일반적이다.

 

 

 

차 후 추가 모듈설치를 위해 설치된 프로그램의 소스가 필요할 때 쉽게 찾을 수 있게 하기 위함도 있다.

 

 

 

 

 

 

 

 

다음과 같이 wget명령을 이용하면, 소스코드를 쉽게 다운로드 받을 수 있다.

 

 

 

 

 

cd /usr/local/src

[root@SULinux-64Bit src]# wget http://apache.mirror.cdnetworks.com//httpd/httpd-2.2.24.tar.bz2

--2013-05-04 05:45:10-- http://apache.mirror.cdnetworks.com//httpd/httpd-2.2.24.tar.bz2

Resolving apache.mirror.cdnetworks.com... 61.110.198.174

Connecting to apache.mirror.cdnetworks.com|61.110.198.174|:80... connected.

HTTP request sent, awaiting response... 200 OK

Length: 5490439 (5.2M) [application/x-bzip2]

Saving to: `httpd-2.2.24.tar.bz2'

 

100%[==========================================================================================>] 5,490,439 4.87M/s in 1.1s

 

2013-05-04 05:45:11 (4.87 MB/s) - `httpd-2.2.24.tar.bz2' saved [5490439/5490439]

 

 

[root@SULinux-64Bit src]# wget http://kr1.php.net/get/php-5.4.14.tar.bz2/from/this/mirror

--2013-05-04 05:46:25-- http://kr1.php.net/get/php-5.4.14.tar.bz2/from/this/mirror

Resolving kr1.php.net... 49.247.228.14

Connecting to kr1.php.net|49.247.228.14|:80... connected.

HTTP request sent, awaiting response... 302 Found

Location: http://kr1.php.net/distributions/php-5.4.14.tar.bz2 [following]

--2013-05-04 05:46:25-- http://kr1.php.net/distributions/php-5.4.14.tar.bz2

Connecting to kr1.php.net|49.247.228.14|:80... connected.

HTTP request sent, awaiting response... 200 OK

Length: 11961015 (11M) [application/x-bzip]

Saving to: `php-5.4.14.tar.bz2'

 

100%[==========================================================================================>] 11,961,015 9.43M/s in 1.2s

 

2013-05-04 05:46:27 (9.43 MB/s) - `php-5.4.14.tar.bz2' saved [11961015/11961015]

 

 

[root@SULinux-64Bit src]# wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.11.tar.gz/from/http://cdn.mysql.com/

--2013-05-04 05:51:39-- http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.11.tar.gz/from/http://cdn.mysql.com/

Resolving dev.mysql.com... 137.254.60.11

Connecting to dev.mysql.com|137.254.60.11|:80... connected.

HTTP request sent, awaiting response... 302 Found

Location: http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.11.tar.gz [following]

--2013-05-04 05:51:40-- http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.11.tar.gz

Resolving cdn.mysql.com... 23.3.105.168, 23.3.105.138

Connecting to cdn.mysql.com|23.3.105.168|:80... connected.

HTTP request sent, awaiting response... 200 OK

Length: 35458544 (34M) [application/x-tar-gz]

Saving to: `mysql-5.6.11.tar.gz'

 

100%[==========================================================================================>] 35,458,544 1.77M/s in 16s

 

2013-05-04 05:51:57 (2.05 MB/s) - `mysql-5.6.11.tar.gz' saved [35458544/35458544]

 

 

 

 

 

 

 

 

 

 

 

공개SW를 제공하는 미러 사이트는 아주 많고, 재 배포하는 사이트 또한 아주 많이 있다.

 

 

 

이러한 점을 이용하여 악의적으로 수정한 소스코드를 배포하는 경우도 있다.

 

 

 

이러한 문제를 방지하기 위해서 오픈소스 배포사이트에서는 MD5를 사용하여 검증할 수 있는 코드를 함께 배포한다.

 

 

 

공식 사이트를 방문하면 다음과 같이 확인 할 수 있고 "md5sum" 명령어를 이용하여 소스코드를 검증할 수 있다.

 

 

 

 

PHP 소스 코드 검증

 

[root@SULinux-64Bit src]# md5sum httpd-2.2.24.tar.bz2

91bd1484aca13a7095d6432be37fc7ae httpd-2.2.24.tar.bz2

 

위와 같이 공식 사이트에서 제공하는 MD5 결과와 다운로드 받은 소스 코드의 MD5 결과를 비교하여 소스코드의 위/변조 여부를 확인 할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

3) Apache 웹 서버 설치

 

 

압축 해제

 

아파치 웹서버의 소스코드를 다운로드 받았다면 아파치 웹 서버를 설치 해 보자. 소스코드는 압축된 상태로 배포되며 다음과 같이 압축을 해제 한다.

 

 

 

 

 

 

 

 

 

[root@SULinux-64Bit src]# tar xvfp httpd-2.2.24.tar.bz2

httpd-2.2.24/

httpd-2.2.24/emacs-style

httpd-2.2.24/httpd.dsp

httpd-2.2.24/libhttpd.dsp

httpd-2.2.24/.deps

httpd-2.2.24/Makefile.in

httpd-2.2.24/include/

httpd-2.2.24/include/scoreboard.h

httpd-2.2.24/include/ap_regkey.h

httpd-2.2.24/include/ap_compat.h

httpd-2.2.24/include/http_config.h

httpd-2.2.24/include/util_time.h

httpd-2.2.24/include/ap_mmn.h

httpd-2.2.24/include/ap_provider.h

-------------- 생략 --------------

 

 

 

 

 

 

압축을 풀기위해서 tar 명령어를 사용하며 다음과 같은 옵션을 주었다.

 

 

 

 

-x : tar로 묶인 파일 또는 디렉토리를 풀어줌

 

-v : 자세한 출력

 

-f : 저장된 파일을 지정하는 옵션

 

-p : 파일의 퍼미션 및 권한 유지

 

-j 또는 -z : bzip2(-j), gzip(-z) 으로 압축된 파일을 풀거나 압축하는 옵션이다.

 

 

 

최신버전의 tar명령어는 파일의 확장자에 따라 압축을 풀어주기 때문에 생략해도 무관하다.

 

 

 

(, 묶을 때는 명시적으로 주어야 한다.)

 

 

 

소스 디렉토리로 이동

 

 

 

 

 

 

[root@SULinux-64Bit src]# cd httpd-2.2.24

 

 

 

 

 

 

 

컴파일 설치를 하기 위한 설정(configure)

 

 

아파치 웹서버의 소스코드를 컴파일 설치하기 위해서 리눅스에 설치된 컴파일러, 라이브러리, 설치에 필요한 명령어등을 점검하고, 설정한 옵션에 따라 모듈 설치 여부 및 설치에 필요한 환경을 구성하는 부분이다.

 

 

 

 

 

 

 

 

 

[root@SULinux-64Bit httpd-2.2.24]# ./configure \

--prefix=/usr/local/apache --enable-module=so \

--enable-module=rewrite --enable-module=headers --enable-ssl

checking for chosen layout... Apache

checking for working mkdir -p... yes

checking build system type... x86_64-unknown-linux-gnu

checking host system type... x86_64-unknown-linux-gnu

checking target system type... x86_64-unknown-linux-gnu

 

Configuring Apache Portable Runtime library ...

-------------- 생략 --------------

 

 

 

 

 

 

위와 같이 configure 명령어를 사용하여 설정을 진행한다.

 

 

 

위 설정은 한 줄에 붙여 작성하여야 하나 “\”를 사용하여 라인 구분을 해 주었다.

 

 

 

쉘에서 "\"는 다음줄과 연결된다는 의미이며, 주의해야 할 점은 "\"의 앞에는 공백으로 띄워줘야 한다.

 

 

 

 

위 단계에서 만약 실패를 했다면, 오류를 확인하여 관련 라이브러리 설치 및 프로그램을 설치해 주어야 한다.

 

 

 

 

 

--prefix=/usr/local/apache

설치될 APACHE의 홈디렉토리를 지정한 것이다.

 

 

 

여기서 지정된 디렉토리내에 설치되는 모든 아파치 파일들이 저장된다.

 

 

 

 

 

--enable-so

DSO방식으로 설치하기 위한 옵션이다.

 

 

 

 

--enable-ssl

SSL/TLS을 지원한다.

 

 

 

(mod_ssl)

 

--with-mpm=worker

아파치프로세스가 사용할 멀티스레드방식을 지정한 것으로 worker방식을 지정한 것이다.

 

 

 

여기서 지정한 worker대신 beos, prefork, mpm_os2, perchild, leader, threadpool등을 지원할 수 있다.

 

 

 

prefork방식은 전통적인 아파치프로세스 방식이며 worker방식은 스레드방식을 의미하는 것으로 멀티프로세싱 모듈, 멀티스레드, 멀티프로세서 지원이 가능하다.

 

 

 

 

--disable-access

호스트기반의 접근제어를 위한 옵션이다.

 

 

 

 

--disable-auth

사용자기반의 접근제어를 위한 옵션이다.

 

 

 

 

--enable-auth-anon

익명(anonymous)사용자 액세스를 위한 옵션이다.

 

 

 

 

--enable-auth-dbm

암호인증방식으로 DBM 데이터베이스의 인증방식을 지원한다.

 

 

 

 

--enable-auth-digest

암호인증방식으로 RFC2617에 따른 Digest인증방식을 지원한다.

 

 

 

 

--disable-status

아파치 프로세스/스레드 모니터링을 지원하지 않도록하는 옵션이다.

 

 

 

 

--disable-autoindex

디렉토리 리스팅을 지원한다.

 

 

 

 

--enable-speling

보편적으로 알려진 URL가운데 틀린 URL스펠링을 고쳐주는 스펠링보정기능을 위한 옵션이다.

 

 

 

--with-port=PORT

아파치 기본포트로 사용할 포트번호를 지정한다.

 

 

 

당연히 기본값은 80이다.

 

 

 

 

--enable-disk-cache

디스크캐싱기능을 위한 모듈을 넣을 수 있다.

 

 

 

 

--enable-mem-cache

메모리 캐싱기능을 위한 모듈을 넣을 수 있다.

 

 

 

 

--enable-auth-ldap

LDAP기반 인증을 지원하기 위한 옵션이다.

 

 

 

 

이외 굉장히 많은 configure옵션들이 있다.

 

 

 

지면관계상 모두 설명하기가 어렵기 때문에 configure옵션들에 대한 모든 설명을 보려면 압축이 풀린 디렉토리내에서 “./configure --help”를 해보기 바란다.

 

 

 

 

아파치 웹서버 컴파일

 

 

컴파일을 하기위한 컴파일러, 라이브러리, 환경설정이 완료되었다면 다음과 같이 컴파일을 수행한다.

 

 

 

 

 

 

 

 

[root@SULinux-64Bit httpd-2.2.24]# make -j 16 | more

Making all in srclib

make[1]: Entering directory `/usr/local/src/httpd-2.2.24/srclib'

Making all in apr

make[2]: Entering directory `/usr/local/src/httpd-2.2.24/srclib/apr'

make[3]: Entering directory `/usr/local/src/httpd-2.2.24/srclib/apr'

gawk -f /usr/local/src/httpd-2.2.24/srclib/apr/build/make_exports.awk /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_allocator.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_atomic.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_dso.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_env.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_errno.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_file_info.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_file_io.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_fnmatch.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_general.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_getopt.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_global_mutex.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_hash.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_inherit.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_lib.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_mmap.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_network_io.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_poll.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_pools.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_portable.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_proc_mutex.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_random.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_ring.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_shm.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_signal.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_strings.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_support.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_tables.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_thread_cond.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_thread_mutex.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_thread_proc.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_thread_rwlock.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_time.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_user.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_version.h /usr/local/src/httpd-2.2.24/srclib/apr/include/apr_want.h > exports.c

-------------- 생략 --------------

 

 

 

 

 

make명령어는 Makefile의 설정된 내용을 참조하여 컴파일 하는 명령어 이다.

 

 

 

여기서 "-j"옵션은 컴파일러 job을 나눠 처리하는 것이며, "-j 16"의 의미는 16개의 job으로 나눠 컴파일 하여 합치게 된다.

 

 

 

최근 멀티 코어 환경에서 각 코어당 job을 할당해 컴파일 속도를 높일 수 있는 옵션이다.

 

 

 

이 수치는 CPU코어 수의 2배 정도가 적당하다.

 

 

 

 

 

아파치 웹서버 설치

컴파일이 완료된 아파치 웹서버를 configure과정에서 정의한 디렉토리에 설치해 주는 과정이다.

 

 

 

 

 

 

 

 

[root@SULinux-64Bit httpd-2.2.24]# make install

Making install in srclib

make[1]: Entering directory `/usr/local/src/httpd-2.2.24/srclib'

Making install in apr

make[2]: Entering directory `/usr/local/src/httpd-2.2.24/srclib/apr'

make[3]: Entering directory `/usr/local/src/httpd-2.2.24/srclib/apr'

mkdir /usr/local/apache

make[3]: `local-all'를 위해 할 일이 없습니다

make[3]: Leaving directory `/usr/local/src/httpd-2.2.24/srclib/apr'

/usr/local/src/httpd-2.2.24/srclib/apr/build/mkdir.sh /usr/local/apache/lib /usr/local/apache/bin /usr/local/apache/build \

/usr/local/apache/lib/pkgconfig /usr/local/apache/include

mkdir /usr/local/apache/lib

mkdir /usr/local/apache/bin

mkdir /usr/local/apache/build

mkdir /usr/local/apache/lib/pkgconfig

mkdir /usr/local/apache/include

-------------- 생략 --------------

 

 

 

 

 

 

 

아파치 웹서버 설치 확인

 

 

이렇게 아파치 웹서버를 컴파일 설치 하였다.

 

 

 

설치된 경로는 설정과정에서 정의한 "/usr/local/apache"이며 다음과 같은 디렉토리가 생성된다.

 

 

 

 

 

 

 

 

 

[root@SULinux-64Bit apache]# tree -d -L 1 /usr/local/apache/

/usr/local/apache/

|-- bin

|-- build

|-- cgi-bin

|-- conf

|-- error

|-- htdocs

|-- icons

|-- include

|-- lib

|-- logs

|-- man

|-- manual

`-- modules

 

 

 

 

 

 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,043 명
  • 현재 강좌수 :  35,853 개
  • 현재 접속자 :  78 명