이 문서는 아파치를 설치하고 공유객체를 이용하여 동적으로 아파치 확장모듈을 설치하기 위한 가이드라인을 제공하기 위해 작성되었습니다. AIX5.3을 기준으로 작성되었지만 테스트 환경이 AIX였을 뿐 리눅스에서도 동일하게 테스트 할 수 있을것입니다. 운영중에 있던 아파치서버에 보안서버를 구축하던 중 mod_ssl이 설치되지 않아 아파치를 재설치를 해야 하는지에 대한 문의가 있었기 때문에 mod-ssl 등의 아파치 확장모듈을 등록하는방법 위주로 설명하겠습니다.(SSL 설정 등 보안서버 구축부분은 이번 문서에서는 제외하겠습니다).
먼저 아파치의 컴파일과 설치에 대해 알아보겠습니다. 기본적으로 최소 50M이상의 여유공간과 ANSI-C 컴파일러(gcc추천), apxs등의 지원 스크립트를 위한 Perl5 인터프리터를 필요로 합니다. 여러 종류의 Perl이 설치되어 있는 시스템이라면 configure가 올바른 것을 찾을수 있도록 –with-perl 옵션을 이용합니다.
먼저 다운로드 받은 apache 설치 파일의 압축을 풉니다.
- tar –xvf httpd-2.2.NN.tar.gz
설치파일은 httpd-2.2.NN.tar.gz의 형태를 가집니다. 이때 NN은 버전정보입니다.이제 configure를 이용하여 아파치 구성정보를 설정합니다,
- configure --prefix=PREFIX --enable-so CC=/usr/bin/gcc
- configure --prefix= PREFIX --enable-modules=all --enable-so --enable-ssl --with-ssl=/usr/bin/openssl CC=/usr/bin/gcc
첫번째 라인은 기본적인 아파치 설정구문입니다. PREFIX는 아파치 설치경로로서 기본값으로 /usr/local/apache2를 사용하게 됩니다. --enable-so는 운영중에 동적으로 공유객체를 이용하여 아파치를 확장하기 위한 옵션입니다. CC는 컴파일에 사용할 C컴파일러 명령어를 지정하는데요. 일반적으로 gcc를 사용하기 때문에 gcc가 설치된 위치를 지정하면 됩니다.
두번째 라인은 아파치 설치와 동시에 배포본에 있는 특정모듈을 함께 설치하고자 할 때 사용되는 예제입니다. 기본설정에서는 비활성화된 상태로 컴파일되는 mod_ssl을 사용하기 위해 --enable-ssl 옵션을 명시해야 합니다. 또한 mod_ssl을 사용하기 위해서는 아파치 설치전 openssl이 설치되어 있어야 합니다.(없으면 미설치) –with-ssl 옵션을 통하여 참조할 openssl위치를 지정합니다.
다음으로는 설정한 아파치를 컴파일해야 합니다
좀더 자세한 configure 구성옵션을 알기 원한다면 http://httpd.apache.org/docs/2.2/programs/configure.html 를 참조하세요.
다소 간단한 명령어지만 컴파일시간은 다소 시간이 걸립니다. 이 시간은 하드웨어와 포함한 모듈수에 따라 달라집니다. 또한 다시 설정을 하고자 한다면 make clean을 통해 컴파일내용을 초기화할 수 있습니다.
이젠 다음 명령어로 컴파일한 아파치를 지정한 설치 위치에 설치합니다.
추가모듈이 있는 경우 httpd.conf파일에 LoadModule=추가모듈SDO가 자동으로 추가가 됩니다.
나중에 별도로 설치하는 경우에는 수동으로 직접 편집할 수 있습니다. 설치를 마쳤다면 운영환경에 맞춰 설정파일을 편집합니다
- 아파치 설치디렉토리로 이동합니다(PREFIX)
- vi PREFIX/conf/httpd.conf
설치디렉토리 하위디렉토리의 conf디렉토리에 들어있는 httpd.conf 파일을 열어 아파치 웹서버를 설정합니다.
ssl을 구성한다면 PREFIX/conf/extra/http-ssl.conf 파일에서 설정하도록 권장하고 있습니다.
단 이 구성정보를 사용하기 위해 httpd.conf파일에서 Include conf/extra/httpd-ssl.conf 항목의 주석을 해제해야 합니다. (또는 별도 설정파일 지정)
웹서버 설정파일과 관련하여 좀더 자세한 사항을 알기를 원하신다면 http://httpd.apache.org/docs/2.2/configuring.html 를 참조하세요.
- PREFIX/bin/httpd –l 을 통하여 httpd를 통하여 등록된 모듈정보를 확인할 수 있습니다.
- PREFIX/bin/httpd –t 를 통해 httpd.conf의 유효성검사를 수행할 수 있습니다.
- http://httpd.apache.org/docs/2.2/mod/ 에서 아파치 패키지내 모듈에 대한 정보를 확인할 수 있습니다.
이제 구동 및 정지를 수행하도록 합니다.
- PREFIX/bin/apachectl start 를 통하여 아파치를 구동합니다
- start 외 stop 및 restart 를 사용할 수 있습니다.
- 2.2 버전에서는 이전버젼에서 ssl 설정시 사용했던 apachectl startssl을 더 이상 사용하지 않습니다
- 앞서 보았던 환경설정(http-ssl.conf)를 읽어 https를 지원합니다. (PREFIX/bin/apachectl start)
추후 버전 업그레이드를 하는 경우에는 기존 설치파일이 있는 경우 쉽게 진행될 수 있습니다. 기존 설치파일경로에 있는config.nice파일에는 소스를 구성할 때 사용했던 configure명령행 옵션을 그대로 저장하고 있기 때문에 추후 새로운 버전 소스에 config.nice파일을 복사하고 실행하면 됩니다.
- config.nice 복사
- make
- make install
동적 공유객체를 이용하여 아파치 모듈 확장하기
앞에서는 아파치를 설치하면서 함께 확장모듈을 등록하는 방법을 살펴보았다면 이번엔 이미 설치된 아파치에서 DSO기능을 이용하여 어떻게 모듈을 추가하는지를 살펴보도록 하겠습니다.(http://httpd.apache.org/docs/2.2/dso.html 참고).
DSO기능을 언제 사용하는지 간략하게 요약하면 ..
- 공유모듈을 나중에 사용하기 위해 아파치를 구성하는 경우
- 아파치 배포본에 있는 추가모듈을 컴파일하고 설치하는 경우
- 제삼자가 만든 아파치 모듈을 컴파일하고 설치하는 경우
- 제삼자가 만든 아파치 모듈을 컴파일하고 설치하는 경우 apxs를 사용하여 설치하는 경우
머 어떤 경우라도 일단 공유모듈이 컴파일되면 httpd.conf에 LoadModule 지시어를 사용하여 아파치에 모듈을 추가할 수 있습니다.
먼저 공유모듈을 나중에 사용하기 위해 아파치를 구성하는 경우가 있는데 이건 앞에서 설치부분에서 설명한바 있으니깐 패스.
- configure --enable-so
- make install
제삼자가 만든 아파치 모듈을 컴파일하고 설치하는 경우는(예를들어mod_foo.c를 설치하는 경우) --add-module옵 사용하여 제삼자가 만든 아파치 모듈을 지정합니다 이때 해당 모듈을 공유객체로 지정한다는 의미로 –enable-foo=shared 옵션을 사용합니다
- configure --add-module=module_type:/path/to/3rdparty/mod_foo.c --enable-foo=shared
- make install
제 삼자가 만든 아파치 모듈을 컴파일하고 apxs를 사용하여 아파치 소스트리 밖에서 설치하는 방법입니다. 일반적으로 제 삼자가 만든 아파치 모듈의 경우 이 방법을 많이 매뉴얼로 제공하고 있습니다. 대부분 압축파일로 제공하고 있는 모듈의 압축을 풀어 해당 위치로 이동한후 아피치의 apxs를 이용하여 컴파일하고 설치를 진행합니다.(예를 들어 mod_foo.c 모듈을 설치하는 경우)
좀더 상세한 정보를 원하신다면 http://httpd.apache.org/docs/2.2/programs/apxs.html 를 참조하세요
- cd /path/to/3rdparty
- apxs -c mod_foo.c
- apxs -i -a -n foo mod_foo.la
마지막으로 아파치 배포본(설치파일)에 있는 아파치 모듈을 설치하고자 하는 경우입니다. 이 문서에서 다루고자 한 부분이구요. 이번 예제는 앞서 설치 예제에서 보았던 ssl설정 부분을 아파치가 이미 설치가 된 이후에 추가하는 것으로 진행해보도록 하겠습니다.
앞서 말했듯이 PREFIX는 아파치가 설치된 경로를 말합니다. –with-apr 옵션을 사용하지 않는다면 배포본에 포함되어 있는 Apache Portable Runtime(APR)이 자동으로 웹서버와 함께 컴파일됩니다. 따라서 컴파일 및 설치시에 그만큼의 시간이 더 소모되기 때문에 이미 설치된 APR을 대신 사용한다는 것을 명시해주어야 합니다. APR 이 설치된 절대경로,파일명,디렉토리명을 사용할 수 있으며 지정한 디렉토리나 그 디렉토리의 하위 디렉토리 bin에 apr-config가 존재해야 합니다. 역시 마찬가지로 http 배포폰에 포함된 APU(apache portable runtime utilities) 대신 이미 설치된 아파치의 APU를 사용하기 위해 –with-apr-util 옵션을 사용하여 경로를 지정합니다. --enable-ssl 옵션은 기본설치에는 비활성화되어있으며 2.x 부터 통합된 mod_ssl을 사용하기 위한 옵션입니다. --with-ssl은 mod_ssl을 사용하는 경우 configure에서 설치된 openssl을 찾을수 있도록 하는 옵션입니다.openssl이 설치된 경로를 지정합니다. --enable-module=shared 옵션은 해당 모듈을 DSO모듈로 컴파일하는 옵션입니다.
마지막으로 CC는 추천하고 있는 C컴파일러의 경로를 지정합니다.
- configure --prefix=PREFIX --with-apr=PREFIX/bin --with-apr-util=PREFIX/bin --enable-so --enable-ssl=ssl --with-ssl=/usr/bin/openssl --enable-module=shared CC=/usr/bin/gcc
- make install
Q&A
설치에 관한 질문이 있다면…*^^*..
- configure는 배포본의 최상위경로에서만 해야하나여?
configure는 특정플랫폼에서 아파치 웹서버를 컴파일하고 설치하기 위해 소스트리를 구성하기 위한 스크립트입니다.유닉스와 유닉스류 시스템에서는 최상위 디렉토리에서 실행하도록 되어있으며 다른 플랫폼을 사용한다면 해당 플랫폼 문서에서 확인할 수 있다고 하네요.
- 아파치 패키지에 있는 추가모듈을 설치하고자 할 때 이미 아파치가 설치되어 있는 경우에는 기존 설정정보를 덮어쓰지 않을까요
확인 결과 패키지 내 추가모듈만을 설치할 때에는 기존 httpd.conf파일에 해당 부분이 추가가 될 뿐입니다. 단지 --with-apr과 --with-apr-util 를 명시하지 않은 경우에는 재설치로 해당 APR이나 APU를 사용하기 위해 배포본에서 함께 컴파일 및 인스톨하게 됩니다. 패키지내 모듈을 추가하실 때에는 이 두 옵션을 사용하시면 됩니다. 참고로 새로이 설정작업을 하시는 경우에는 make clean을 통해 컴파일 정보를 삭제할 수 있습니다. 하지만 언제나 백업은 필수겠죠…..
- 아파치 2.2버전에서 SSL을 추가 설치했는데요. mod_ssl.so를 확인할 수 없습니다.
아파치는 mod_so의 LoadModule 지시어로 실행중에 동적공유객체를 서버로 읽어들일수 있으며 이런 확장방식을 사용하기 위해서는 플랫폼이 DSO 기능을 지원하고 아파치 httpd 실행파일을 mod_so모듈과 함께 컴파일해야 합니다. apxs도구는 이 조건이 만족하지 않으면 실행되지 않습니다. httpd –l을 이용하면 설치된 모듈목록을 확인할 수 있습니다. 하지만 mod_ssl.c 항목을 발견하셨다면 해당 모듈이 앞서말한 이유로 공유객체가 아닌 정적으로 설치되었기 때문입니다. 즉 아파치가 구동과 동시에 항상 로드되도록 구성되었다는 의미이며 이 경우 httpd.conf에서 LoadModule ssl_module modules/mod_ssl.so 라인이 추가되지 않습니다. 하지만 정상적으로 설치된 상태입니다.