Hyun Chul's Utopia
CGI 환경 구축하기 본문
하고나니 간단한데.. 제가 모르는게 많아서 삽질을 했네요.. 결론만 말씀 드리면 Apache 설정값을 약간 수정해 주는게 전부입니다. 우선 apache2가 설치가 되고, 정상 동작이 되고 있어야 합니다. 그렇지 않다면 apache부터 설치해 주세요..
제가 구축한 환경은 다음과 같습니다.
- uBuntu 12.04LTS
- APM 설치 (해당 설치 방법은 제 블로그 http://darphin.tistory.com/37 에 설명되어 있습니다.)
정도 입니다.
우선 설치해야할 것이 하나 있습니다. 간단히 한줄을 적어줍니다.
$apt-get install libapach2-mod-perl2
설치 완료 후, CGI대상 경로를 하나 생성해 주면 됩니다. 이름은 마음데로... 일반적으로는 cgi-bin이라는 이름을 많이 사용하는 듯 합니다. 저같은 경우 기본 웹페이지 경로인 /var/www/ 경로상에 cgitest 라는 폴더를 만들었습니다. 즉 /var/www/cgitest/ 가 되겠네요.
$mkdir /var/www/cgitest
CGI는 기본적으로 대상 폴더를 하나 지정해야 합니다. ScriptAlias지시어를 이용하여 Apaphe는 특정 디렉토리를 CGI프로그램 용으로 인지합니다. Apache는 이 디렉토리 안에 있는 모든 파일이 CGI프로그램 이라고 가정하여 클라이언트가 요청을 하면, 해당 작업을 실행하려 합니다.
방금 만든 CGI대상 경로를 적용해야 합니다. 설정 파일을 변경해 주면 되는데요 해당 경로는 다음과 같습니다. (저의 경우 uBuntn 12.04인데 다른 배포판은 어떤지 모르겠네요;;)
설정파일 경로 : /etc/apache2/sites-enabled/000-default
해당 파일을 편집해 줍니다. ScriptAlias 항목을 눈여겨 보시면 됩니다.
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /var/www/cgitest/ ----> 아까 생성한 CGI경로를 적어주세요
<Directory "/var/www/cgitest"> ----> 아까 생성한 CGI경로를 적어주세요
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
AddHandler cgi-script cgi pl ----> 추가해 주세요
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
변경 후, 저장까지 완료하면 아파치 서버를 재시작 시켜야 합니다.
$ sudo apache2ctl restart
끝입니다... 이제 정상 동작하는지 확인을 해보아야 겠죠?
예제코드 입니다.
// Hello CGI World
// File name : test_1.cpp
//
// Bae Hyunchul
// bhchhjc@gmail.com
#include<iostream>
using namespace std;
#include<stdlib.h>
#include<string.h>
int main()
{
char *pStrGet = NULL;
// Http Header
cout<<"Content-type: text/html\n\n"; // MIME Type
// Html Data
cout<<"<html>"<<endl;
cout<<"<body>"<<endl;
cout<<"Hello, CGI World, BHC !!!"<<endl;
cout<<"<BR>"<<endl;
cout<<"Your IP Address is "<<getenv("REMOTE_ADDR")<<endl;
cout<<"<BR>"<<endl;
pStrGet = getenv("QUERY_STRING");
if(pStrGet != NULL)
{
if(strlen(pStrGet) != 0)
cout<<"Get Message :: "<<pStrGet<<"<BR>"<<endl;
else
cout<<"Get Message :: No Data<BR>"<<endl;
}
else
{
cout<<"Get Message :: getenv() :: NULL<BR>"<<endl;
}
cout<<"</body>"<<endl;
cout<<"</html>"<<endl;
return 0;
}
컴파일 하고 나서 웹페이지를 띄워보면.. 정상적으로 동작하는 것을 확인할 수 있습니다. 생성된 CGI파일은 아까 지정한 CGI경로 안에 있어야 합니다.
$g++ -o ./test_1.cgi ./test_1cpp
'프로그래밍 > CGI' 카테고리의 다른 글
CGI 간략한 소개 (0) | 2013.02.06 |
---|