본문 바로가기

개발/서버

아파치 모듈 추가하기 (apax)

apax (APache eXtension)


1. 아파치 http 서버의 확장모듈을 컴파일하고 설치하는 도구
2. 아파치에 모듈을 추가하고자 할때 아파치 소스파일을 "./configure" 을 이용하여 재컴파일 하는 방법도 있지만..
  아파치 소스코드가 존재하지 않을때 모듈을 간단이 DSO화일로 만들때 사용하는 도구이다.
 

  -> DSO 화일이란? Dynamic Shared Object : LoadModule 을 사용해서 동적으로 동작하는 모듈 화일.
             *  DSO가 아닌 모듈은 아파치 검파일시 --add_module, --enable-module, --disable-module 이용하여 정적으로 동작하는 모듈이다. (config.status에 --enable-module, --disable-module 리스트 있다.)  -  AddModule  지시어를 사용한다.
  -> LoadModule : mod_so 모듈에서 제공하는 지시어. 


3. apax를 사용하려면 플랫폼이 DSO기능을 지원하고, 아파치 httpd 실행화일을 mod_so 모듈과 같이 컴파일 해야한다.
  (확인하는 방법 : "httpd -l" 을 실행했을때 mod_so 모듈이 나와야한다.)

 

-----------------------------------------------------------------------------------

$ apxs -i -a -c mod_foo.c
gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c
ld -Bshareable -o mod_foo.so mod_foo.o
cp mod_foo.so /path/to/apache/modules/mod_foo.so
chmod 755 /path/to/apache/modules/mod_foo.so
[activating module `foo' in /path/to/apache/etc/httpd.conf]
$ apachectl restart
/path/to/apache/sbin/apachectl restart: httpd not running, trying to start
[Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module
/path/to/apache/sbin/apachectl restart: httpd started

-----------------------------------------------------------------------------------

 


* -c 뒤의 화일들은 확장자를 보고 소스화일(.c), 오브젝트화일(.o), 라이브러리모음(.a)로 구분해서 알아서 컴파일 or 링크한다고 한다. 똑똑한 녀석..

 

* 컴파일한 오브젝트를 사용하려면 반드시 위치독립코드(PIC:Position Independent Code)로 컴파일 해야한다고 한다.(gcc 에선 -fpic 옵션) 
   -> PIC : 적재시에 메모리의 어떤 주소에 적재되더라도 정상적으로 실행될 수 있는 코드

mod_rewrite 설치시

cd 아파치설치디렉토리/src/modules/standard
/usr/local/apache/apxs -c -I/usr/include/gdbm mod_rewrite.c
gcc -shared -o mod_rewrite.so mod_rewrite.o -lgdbm
/usr/local/apache/apxs -i mod_rewrite.so

vi /usr/local/apache/conf/httpd.conf
#------- 아래 부분 추가 -------
LoadModule rewrite_module     libexec/mod_rewrite.so
Addmodule mod_rewrite.c
#------- 여기까지 ---------
/usr/local/apache/apachectl configtest
/usr/local/apache/apachectl restart


1.3.X 버젼에서 mod_rewrite 적재

아파치소스(./configure 명령을 한번도 내리지 않은 원본소스를 말함) 디렉토리에서

# ./configure --enable-module=rewrite
# cd src/modules/standard
# gcc -shared -o mod_rewrite.so mod_rewrite.o
# cp mod_rewrite.so /usr/local/apache/libexec/

2.X 버젼에서
./modules/mappers/mod_rewrite.c 위치에 있다. 


# /usr/local/apache/bin/apxs -c -I/usr/include/gdbm mod_rewrite.c
# gcc -shared -o mod_rewrite.so mod_rewrite.o -lgdbm
# /usr/local/apache/bin/apxs -i mod_rewrite.so

에러 처리 


다음 에러가 발생 할수도 있다 . 

/usr/bin/ld: cannot find -lgdbm

collect2: ld returned 1 exit status


이때는  yum install gdbm-devel  패키지 설치한다. 

--------------------

mod_header.c 추가 방법 

modules/metadata 에 있다. 

위와 동일 
/usr/local/apache/bin/apxs -c -I/usr/include/gdbm mod_headers.c
gcc -shared -o mod_headers.so mod_headers.o -lgdbm

/usr/local/apache/bin/apxs -i mod_headers.so




아파치 압축 전송 apache2 mod_deflate (gzip) 설치

/modules/filters/mod_deflate.c 에 있음

/usr/local/apache/bin/apxs -c -I/usr/include/gdbm mod_deflate.c
gcc -shared -o mod_deflate.so mod_deflate.o -lgdbm

/usr/local/apache/bin/apxs -i mod_deflate.so



1.3 에서 쓰던 mod_gzip 은 사라지고, 2.x 부터는 mod_deflate 이 대신

gzip compress 기능을 활성화 하기 위해 httpd.conf 파일에 들어갔던 세팅입니다 (apache 2.0 기준 :: windows 설치 버전)


1. 아래 모듈의 주석("#")을 해제하거나 없을 시에는 작성.

# 압축을 위한 모듈

LoadModule deflate_module modules/mod_deflate.so

# 헤더 제어를 위한 모듈

LoadModule headers_module modules/mod_headers.so


2. 타입에 의한 설정을 이용하였습니다 (다른 방법도 있음)

압축률은 1~9까지 있는데 크게 차이는 없더군요, 테스트결과 1이 더 느린거 같아서 저는 9로 했습니다 (최대압축률:9 ~ 최소압축률:1)

########################################################################

# 타입에 따라 압축을 한다 (text파일 위주)

########################################################################

AddOutputFilterByType DEFLATE text/html text/plain text/xml

# 압축률을 설정한다.

DeflateCompressionLevel 9

########################################################################


3. 브라우저 따라 문제가 있는 것 같더군요 그외 압축을 회피할 경우에 대해 설정합니다(이미 압축이 되어있는 형식의 파일, 압축시 간헐적으로 FF에서 문제가 생기는 파일등)

########################################################################

# 압축을 하지 않을 경우 지정

########################################################################

# Netscape 4.x에 문제가 있다...

BrowserMatch ^Mozilla/4 gzip-only-text/html

# Netscape 4.06-4.08에 더 문제가 있다

BrowserMatch ^Mozilla/4\.0[678] no-gzip

# MSIE은 Netscape라고 자신을 알리지만, 문제가 없다

BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

# 압축하지 않을것목록..

SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|bmp|zip|tar|rar|alz|a00|ace|mp3|mpe?g|wav|asf|wma|wmv|swf|exe|pdf|doc|xsl|hwp|java|c|t?gz|bz2|7z)$ no-gzip dont-vary

# 프록시가 잘못된 내용을 전달하지않도록 한다

Header append Vary User-Agent env=!dont-vary

########################################################################



구글 페이지 개선 모듈  Mod_pagespeed

http://code.google.com/intl/ko/speed/page-speed/download.html


-- 아직은 비추 


libxml2.so 모듈 추가 

64비트는 LoadFile /usr/lib64/libxml2.so







컴파일 이후에 추가해야 하는 라인도 아파치 버젼에 따라 다릅니다.


'개발 > 서버' 카테고리의 다른 글

ipconfig /flushdns  (0) 2011.12.13
공개 네트워크 모니터링 툴 [Ethereal]  (0) 2011.12.13
vsftp  (0) 2011.12.05
libqrencode  (0) 2011.11.15
sendmail  (0) 2011.11.05