리눅스마스터1급 : 아파치 웹 서버 설치
작성자 정보
- 관리자 작성
- 작성일
컨텐츠 정보
- 3,100 조회
- 0 추천
- 목록
본문
리눅스마스터1급 : 아파치 웹 서버 설치
아파치(APACHE)는 오픈소스기반의 가장 높은 성능과 안정성을 보장하며 가장 많은 사람들이 사용하는 대표적인 웹 서버이다.
최근 netcraft.com에 따르면 최고 인기있는 100만개웹서버에서 사용하고있는 웹서버솔루션이 무엇인가를 조사한 결과 51.01%가 아파치(APACHE)를 웹서버로 사용하고있다고 한다.
(아래 도표 참조) 그만큼 아파치의 사용율과 신뢰도에 있어서 자타 인증을 받고 있다는 가장 확실한 증거일 것이다.
아파치 웹서버 단독으로 사용하기 보다는 위 그림과 같이 Apache, PHP, MySQL(이하 APM)을 연동하여 사용한다.
Apache는 웹서버이며, PHP는 웹에서 동적인 컨텐츠를 생성하기 위한 스크립트 언어이다.
MySQL은 데이터를 저장하기 위한 DBMS이다.
Apache와 PHP의 연결 관계는 Apache의 DSO(Dynamic Shared Objects) 방식으로 연결된다.
이는 Apache프로그램이 동적으로 필요시 PHP모듈을 불러 사용하는 형태이다.
Apache와 PHP가 분리되어 있기 때문에 PHP의 버전 및 기타 이유로 변경시 PHP만 다시 설치하는 것이 가능하다.
PHP와 MySQL은 MySQL의 클라이언트 라이브러리를 PHP에서 불러 들어와 사용하는 형태이다.
PHP 설치 과정에서 MySQL의 클라이언트 라이브러리 파일을 사용한 PHP만의 클라이언트 라이브러리를 만들고 이를 이용하여 MySQL에 접속하게 된다.
PHP 버전에 따라 mysqli 등 다양한 라이브러리를 지원하며, MySQL 서버와 연결하기 위해서는 tcp/ip 및 socket 을 사용하여 접속 할 수 있다.
기본적으로 tcp/ip에서는 TCP 3306 포트를 사용하며, socket은 /tmp/mysql.sock 파일을 이용하여 PHP에서 MySQL 서버에 접속 할 수 있다.
위 그림은 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
아파치홈페이지
PHP홈페이지
MySQL홈페이지
소스코드를 다운로드 완료 하였다면 설치를 위해 설치 작업 공간으로 이동하자, 리눅스의 사용자 프로그램은 "/usr/local"아래에 설치하는 것이 대부분이며, 설치된 프로그램의 소스는 "/usr/local/src"에 두는 것이 일반적이다.
차 후 추가 모듈설치를 위해 설치된 프로그램의 소스가 필요할 때 쉽게 찾을 수 있게 하기 위함도 있다.
|
|
| |
|
다음과 같이 wget명령을 이용하면, 소스코드를 쉽게 다운로드 받을 수 있다.
|
| |
|
|
|
|
|
| |
|
공개SW를 제공하는 미러 사이트는 아주 많고, 재 배포하는 사이트 또한 아주 많이 있다.
이러한 점을 이용하여 악의적으로 수정한 소스코드를 배포하는 경우도 있다.
이러한 문제를 방지하기 위해서 오픈소스 배포사이트에서는 MD5를 사용하여 검증할 수 있는 코드를 함께 배포한다.
공식 사이트를 방문하면 다음과 같이 확인 할 수 있고 "md5sum" 명령어를 이용하여 소스코드를 검증할 수 있다.
∙PHP 소스 코드 검증
위와 같이 공식 사이트에서 제공하는 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 |
|
|
|
|
관련자료
-
이전
-
다음