APACHE + FCGI 연동 , 예제 ( apache2 - fast cgi - 2006 06) 용-ILE/설치편2008. 5. 15. 19:12
APACHE + FCGI 연동 , 예제 ( apache2 - fast cgi - 2006 06)
0. 준비
- 소스 다운로드
apache : http://www.apache.org
fcgi : http://www.fastcgi.com
사이트에서 검색? 하여 소스를 다운 받는다.
httpd-2.0.54.tar.gz , mod_fastcgi-2.4.2.tar.tar,fcgi-2.4.0.tar
참고로 httpd-2.2.2 버전은 fcgi 모듈 설치시 헤더파일 없다는 문제 발생
되도록 httpd-2.0XX 버전을 다운 받는다. (httpd-2.1XX 테스트 안해봄)
- 설치 계정: 설치 계정 생성
ex) $>useradd fs
- 설치 디렉토리 : /home/fs/apmz
ex) fs$> mkdir apmz
* 데비안 리눅스 3.0 에서 설치 한 문서
1. apache 설치
가. 해당 소스를 압축을 푼 디렉토리에서 configure 수행
./configure --prefix=/home/fs/apmz/apache2 --enable-mods-shared=most --enable-modules=so --with-mpm=worker
옵션 설명:
--prefix= 설치 디렉토리 디렉토리
--enable-mods-shared=most --enable-modules=so DSO 방식으로 PHP 모듈을 끼워 넣을 수 있도록 아파치를 컴파일하기 위해 옵션을 반드시 사용합니다.
--with-mpm=worker 옵션은 아파치 설정 파일에서 살펴보겠지만 다중 프로세서 모듈(MPM) 중 worker 모듈을 지원할 수 있도록 하는 옵션입니다.
이 옵션을 추가하지 않으면 아파치 2.x 버전에서는 기본적으로 perfork 모듈을 지원합니다.
*오류 발생시 리플
http://cafe.naver.com/linuxmaster.cafe
나. 컴파일
./make
*오류 발생시 리플
http://cafe.naver.com/linuxmaster.cafe
다. 설치
./make install
ls /home/fs/apmz/apache2 실행하여 설치되었는지 확인해본다.
라. LD_LIBRARY_PATH 설정
아파치가 SO 모듈을 찾을수 있도록 사용자 쉘에 모듈 디렉토리 위치를 설정해둔다.
mysql 디렉토리 뒤에 apache2/lib , apache2/modules 두개 추가 해준다
ex) bash 쉘경우
vi 홈디렉토리/.bash_profile
export LD_LIBRARY_PATH=/home/fs/apmz/apache2/lib:/home/fs/apmz/apache2/modules
source .bash_profile 를 실행하여 바로 현 쉘에 적용
바. 실행
/home/fs/apmz/apache2/bin/apachectl start
실행 후 에러가 없으면 완료
이미 사용하는 포트라는 메시가 나올경우 http.conf 파일에서 수정 할 것
2. FCGI 모듈 설치
가. fcgi 모듈
mod_fastcgi-2.4.2.tar 압축 푼 디렉 토리에서
Makefile.AP2 파일에서 top_dir=/home/fs/apmz/apache2/fcgi2 을 설치된 fcgi 경로 지정
cp Makefile.AP2 Makefile
make
make install
설치후 httpd.conf 에 아래 사항을 추가한다 .
================================================================================================
# 아래 모듈 추가 라인이 없다면 httpd.conf에 써준다
LoadModule fastcgi_module modules/mod_fastcgi.so
<IfModule mod_fastcgi.c>
Alias /fcgi-bin/ "/home/fs/apmz/apache2/fcgi-bin/"
<Directory "/home/fs/apmz/apache2/fcgi-bin">
SetHandler fastcgi-script
Options +ExecCGI
</Directory>
# 확장자가 fcgi경우 fast-cgi 동작
AddHandler fastcgi-script .fcgi .fpl
# 아래 주석으로 해둔 사항은 선택 사항임
# fast-cgi 프로세스 최대 생성 갯수 값등 설정 (ps -ef 확인)
FastCgiConfig -initial-env PATH=/home/fs/apmz/apache2/fcgi-bin -maxClassProcesses 3 -startDelay 1
# 아파치 시작시 이미 fcgi 프로세스를 실행해 둘 경우 설정 (ps -ef 확인)
# FastCgiServer fcgi-bin/fcgi_example.fcgi -processes 3
# 보다 자세한 설정사항은 http://www.fastcgi.com -.-^
</IfModule>
====================================================================================================
나. fcgi C 개발 킷(라이브러리) 설치
fcgi-2.4.0.tar 압축 푼디렉토리
./configure --prefix=/home/fs/apmz/apache2/fcgi2
make
make install
3. C 예제 printf("FCGI_Accept()");
fast-cgi 동작원리를 설명하기에는 필자 역시 명확하게는 모르기 때문에 -.-;;
간단하게 설명하면 일반 CGI 경우 한번 실행할때 마다 프로세스를 생성하여 동작을 해주는데
fcgi 경우 실행하고 끝나는게 아니고 무한 루프를 돌며 서버형태로 지속적으로 동작 해준다.
fcgi와 아파치 사이의 프로세스 통신은 UDS(unix domain socket) 기반으로 UDS은 TCP/IP 어플리케이션 계층에서
TCP 계층까지만 메시지가 전달되고, 다시 곧바로 어플리케이션 계층으로 메시지가 올라가게 된다.
아무튼 우리가 FCGI를 사용한다면 FCGI_Accept() API안에다만 적어주면 알아서? 동작하게된다.
가. 소스
/**********************
fcgi_example.c
************************/
#include <stdio.h>
#include "/home/fs/apmz/apache2/fcgi2/include/fcgi_stdio.h"
int main()
{
int cnt=0;
/* fastcgi 시작 부분 이 안에 루프 돌면서 할 작업을 넣어 둔다. **/
while (FCGI_Accept() >= 0) {
printf("Content-type: text/html; charset=euc-kr\n\n");
printf(" Process FCGI_Accept() Cnt:%d",cnt++);
}
return 0;
}
나. 컴파일(정적) libfcgi.a 위치가 /home/fs/apmz/apache2/fcgi2/lib경우
gcc -o fcgi_example.fcgi fcgi_example.c /home/fs/apmz/apache2/fcgi2/lib/libfcgi.a
fcgi-bin 디렉토리로 복사
cp fcgi_example.fcgi /home/fs/apmz/apache2/fcgi-bin/
다. 확인
아파치 재시작
/home/fs/apmz/apache2/bin/apachectl restart
http://localhost:8244/fcgi-bin/fcgi_example.fcgi
Process FCGI_Accept() Cnt:0
Process FCGI_Accept() Cnt:1
Process FCGI_Accept() Cnt:2
.
.
.
Process FCGI_Accept() Cnt:20
이처럼 Cnt가 초기화가 되는게 아니라 올라가는걸 볼수있다
여러 파일을 열어서 자주 사용하는 cgi 프로그램있다면 FCGI_Accept() 함수 위에
미리 사용할 파일을 미리 열어둔다면 한번만 실행되기 때문에 관련된 소비시간을 많이 줄여
실용적인 fcgi를 사용할 수 있을것이다.
네이버 리눅스 마스터 카페
* 추가 설정 참조
FastCgiConfig -maxProcesses 20 -minProcesses 8 -maxClassProcesses 8 -killInterval 36000 -updateInterval 36000 -idle-timeout 15000 -appConnTimeout 15000 -listen-queue-depth 500 -singleThreshhold 1
AppClass /home/fs/fcgi-bin/fs.fcgi -processes 4 -listen-queue-depth 50 -idle-timeout 3600 -appConnTimeout 2000 -initial-env LD_LIBRARY_PATH=/home/fs/flib
'용-ILE > 설치편' 카테고리의 다른 글
[오라클 XE oracle xe 데비안 패키지 설치 (0) | 2008.05.15 |
---|---|
[SMALLSQL] 순수 자바 DBMS | small | sql | java | 디비 (0) | 2008.05.15 |
[APACHE cronolog] 아파치 로그 관리 월 날짜별로 월별 일별 (0) | 2008.05.15 |
APM (FCGI) 소스 DSO 모드 설치 - 연동 ( apache2 - fast cgi - mysql5 php5 - 2006 06) (2) | 2008.05.15 |