Apache HTTP Server Version 2.4
üÃµÈ µâ | üÃµÈ ÁöÃî |
---|---|
CGI (Common Gateway Interface) À¥öƢ Åë CGI ÇÁÎ¥ ÈÀ CGI Å©óí ΣÂ, (À¥äÀÌÁö »ëÀ» µåÂ) ÜÎ ÇÁÎ¥ú ÅëÅÇÏ ýÀ» ÁÀÇÇÑÙ. À¥»çÀÌ碯 µÀûÀÎ äÀÌÁö¦ µå ƢÀå ÈçÇÏí £ÜÇÑ ýÀÌÙ. ÀÌ Â ÄÄ À¥ö CGI¦ ÇÏ ýÀ» ÒƩÇÏí, CGI ÇÁÎ¥À» ÀÛÇ»Ù.
CGI ÇÁÎ¥ÀÌ ÃÙÎ µÀÛÇÏÁé CGI ÇÇàÀÌ ƢÉÇϵµÏ ÄĦ ÁÇ ÇÑÙ. ÁÇÏ ýÀ ©¯ƢÁöÙ.
ScriptAlias
ÁöÃî¦ »çëÇÏé ÄÄ ¯Á µÅä碬¦ CGI ÇÁÎ¥ëÀÎ µÙ. ÄÄ ÀÌ µÅä碯 ÀÖ µç ÄÀÏÀÌ CGI ÇÁÎ¥ÀÌóí ƢÁÇÏ© ŬóÀÌƢ ÀÚÀ» äûÇÏé ÀÚÀ» ÇÇàÇÏÁí õµÇÑÙ.
ScriptAlias
ÁöÃî ÙÀú ơÀÌ »çëÇÑÙ.
ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
À Á¦Â ÄĦ â» ÀåÒ ÄÇÑ Ʃì apache2.conf
ÁÄÀÏ ÀÖ »ëÀÌÙ. DocumentRoot
µÅä Û ÀÖ µÅä碯 »çëÇÑÙ. Alias
Í ScriptAlias
ÀÇ ÂÀÌÁÀ ScriptAlias
Ƣ ÃƢÎ URL ÕÎÀÎ ÃÀÛÇÏ µç ÄÀÏÀ» CGI ÇÁÎ¥ÀÎ ÃëÇÏ ÁÀÌÙ. ÀÀÇ ÁÀ ÄÄÔ /cgi-bin/
ÀÎ ÃÀÛÇÏ ÀÚÀ» äûÇÏé /usr/local/apache2/cgi-bin/
µÅä碯 ã CGI ÇÁÎ¥ÀÎ ÃÇÏóí ËƢÙ.
¦ µéî, URL http://www.example.com/cgi-bin/test.pl
À» äûÇÏé ÄÄ /usr/local/apache2/cgi-bin/test.pl
ÄÀÏÀ» ÇÇàÇÏ© áú¦ ÝȯÇÑÙ. ơ ÄÀÏÀÌ ÁÀçÇÏí ÇÇàƢÉÇÏç îҩ ýÀεç ÃâÂÀ» Ç ÇÑÙ. Áö ÊÀé ÄÄ ÀùÀ» Ù.
Åë È»ó ÀÌÀ¯ҡש碯 CGI ÇÁÎ¥À Dir
ÁöÃî¦ »çëÇÏ© »çëÀÚƢ ÀÚÅÀÇ ÈµÅä碯 À¥äÀÌÁö¦ ƢÁö Ʃì¦ ƢÁÇÏÀÚ. »çëÀÚƢ ÀÚÅÀÇ CGI ÇÁÎ¥À» »çëÇÏí ÍÀµ¥ cgi-bin
µÅä碯 Á¢ÙÇÇÑÀÌ Ùé, Ù¥ ơóµµ CGI ÇÁÎ¥À» ÇÇàÇÏí ÍÀ» ÍÀÌÙ.
« µÅä碯 CGI ÇÇàÀ» ÇãëÇÏÁé µÎ úÁÀÌ ÇÊäÇÏÙ. ÕÀú, Options
ÁöÃî ExecCGI
¦ ÁöÁÇ ÇÑÙ.
öÀÇ ÁÖÁÄÀÏ ÁÁ¢ Options
ÁöÃî¦ »çëÇÏ© ¯Á µÅä碯 CGI ÇÇàÀ» ÇãëÇÒ ö ÀÖÙ.
<Directory /usr/local/apache2/htdocs/somedir>
Options +ExecCGI
</Directory>
À ÁöÃîÎ ÄÄ CGI ÄÀÏÀÇ ÇÇàÀ» ÇãëÇÑÙ. îҩ ÄÀÏÀÌ CGI ÄÀÏÀÎÁöµµ öÔ ËÁ ÇÑÙ. ÙÀ AddHandler
ÁöÃî öÔ ÈÀåÀÚƢ cgi
pl
ÀÎ ÄÀÏÀ µÎ CGI ÇÁÎ¥ÀÌóí ËƢÙ.
AddHandler cgi-script .cgi .pl
.htaccess
ÅõÅäóÀ apache2.conf
Á¢ÙÇÇÑÀÌ Â Ʃì CGI ÇÁÎ¥À» »çëÇÒ ö ÀÖ ýÀ» ËÁÁÙ.
ÁÀ» »çëÇÏé »çëÀÚ µÅä碯 .cgi
Î Â ÄÀÏÀ» CGI ÇÁÎ¥ÀÎ ÇÇàÇÑÙ.
<Directory /home/*/public_html>
Options +ExecCGI
AddHandler cgi-script .cgi
</Directory>
ÙÀÀ» »çëÇÏé »çëÀÚ µÅäÀÇ cgi-bin
ÇÏÀµÅä碯 ÀÖ µç ÄÀÏÀ» CGI ÇÁÎ¥ÀÎ ÀÎÄÇÑÙ.
<Directory /home/*/public_html/cgi-bin>
Options ExecCGI
SetHandler cgi-script
</Directory>
``ÀÏÝÀûÀÎ'' ÇÁÎÖú CGI ÇÁÎÖ »çÀÌ µÎƢÁö ÁÖµÈ ÂÀÌÁÀÌ ÀÖÙ.
àÂÀÌ CGI ÇÁÎ¥À Ù¥ ÃâÂÀ» ÇÏâÀü ÕÀú MIME-type Çìõ¦ ÃâÂÇ ÇÑÙ ÁÀÌÙ. HTTP Çìõ ŬóÀÌ碯Ô Å¬óÀÌƢ îҩ »ëÀ» ÔµÉÁö Ì ËƢÙ. Åë ÙÀú ơƢÙ.
Content-type: text/html
µÎ ÂÀÌ HTML ÈÀ êóìÀúƢ ©ÁÙ ö ÀÖ ÇüÄÀÎ ÃâÂÇ ÇÑÙ ÁÀÌÙ. ëÎÀÇ Ʃì HTMLÀ» ÃâÂÇÏÁö, ҡעҡסÎ gif ú ơÀÌ HTMLÀÌ Ñ »ëÀ» ÃâÂÇÏ CGI ÇÁÎ¥À» ÀÛÇÏ Ʃìµµ ÀÖÙ.
µÎƢÁö¦ Á¦ÜÇÏí CGI ÇÁÎ¥ ÀÛÀ ÀÌÌ µéî ÒÀ» Ù¥ ÇÁÎ¥µéú Åì ñÁÇÏÙ.
ÙÀÀ êóìÀú ÇÑ ÁÙÀ» Âï CGI ÇÁÎ¥ Á¦Ù. ëÎ first.pl
ÀÌó ÄÀÏ ÀúÀåÇÏí, cgi-bin
µÅä碯 »çÇÑÙ.
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, World.";
Perl ÀÍÇÏÁö Êõóµµ « ÀÏÀÌ ÀÏîÂÁö Ë ö ÀÖÙ. àÁÙÀ ÄÄ(ÈÀ »çëÇÏ ©)Ô /usr/bin/perl
ÀÄ ÀÖ ÀÎÅÍÇÁÅÍÀ» »çëÇÏ© ÀÌ ÇÁÎ¥ ÄÀÏÀ» ÇÇàÇÏóí ËƢÙ. µÎ ÁÙÀ Ý »ÇÑ content-type À» ÃâÂÇÏí carriage-return ÁÙÙÀ» µÎ ÃâÂÇÑÙ. ¯é Çìõ µÚ HTTP ÇìõÀÇ À» ҩÇÏ óÁÙÀÌ »ýâí, »ÀÌ ÃÀÛÇÑÙ.  ÁÙÀ "Hello, World." ÀÚÀ» ÃâÂÇÑÙ. ÀÌÍÀÎ ÀÌÙ.
êóìÀú¦ ÇÇàÇÏí ÁÖÒ¦ ÀÔÂÇÑÙ
http://www.example.com/cgi-bin/first.pl
ÄÀÏ ÀåÒ¦ ÀÔÂÇÏé, êóìÀúâ Hello, World.
ÇÑ ÁÙÀÌ ÀÎÙ. ÈïµÇÁö ÊÁö, ÇÑ µÀÛÇÏ ÍÀ» ÒÀÏ ÀÌÁ¦ Ù¥ ÍÀ» õµÇ ö ÀÖÙ.
À¥ CGI ÇÁÎ¥ Á¢ÙÇÒҡ êóìÀú à ö ÀÖ »ëÀ â»ÀûÀÎ ƢÁöÙ.
Content-Type
À» ÁÇÏÂÁö ÈÀÎÇÑÙ.
ö çÅú µÀÏÇÑ èÁÀÎ µÀÛÇÏÁö ÊÀÀ» íÉÇÏó. Áï, öƢ ÃÀÛÇÏé ö ñ¯Ç »çëÀÚ ÇÇÑ(Åë nobody
www
)ÀÎ µÀÛÇÑÙ. çÅÀÌ ÒÀ¯ÇÑ ÄÀÏÀ» ÇÇàÇÏÁé ÇÇÑÀÌ ÇÊäÇÏÙ. ÄÀÏ nobody
Ƣ ÇÇàÇÏâ ÃÇÑ ÇÇÑÀ» ÁÖâÀÇ Åë µÎÔ ÄÀÏÀÇ ÇÇà ÇÇÑÀ» ÁÙ.
chmod a+x first.pl
Ç, ÇÁÎ¥ÀÌ Ù¥ ÄÀÏÀ» ÀÅ Ùé ÀÌ ÄÀϵµ ÀûÀýÇÑ ÇÇÑÀÌ ÇÊäÇÏÙ.
íÉÇà ÇÁÎ¥À» ÇÇàÇÏé ÀÚµÀÎ îҩ ÁƢ ©Î ÀüµÈÙ. ¦ µéî, PATH
 ©Ô çÅÀÌ »ÇÑ ÄÀÏÀ» ãÀ» ÀåÒ¦ ËÁÁÙ.
À¥öƢ ÇÁÎ¥À» CGI ÇÁÎ¥ÀÎ ÇÇàÇÒҡע PATH
Ƣ Ù¦ ö ÀÖÙ. (¦ µéî, sendmail
ơÀÌ) CGI ÇÁÎ¥ È ÇÇàÇÏ íÉî ÏÀüÇÑ ƩÎÎ íÃÇ ©ÀÌ íÉî¦ Ã£À» ö ÀÖÙ.
ƩÎ Á¦Â ÙÀú ơÀÌ CGI ÇÁÎ¥ àÁÙ À ũ ÀÎÅÍÇÁÅÍ (Åë perl
) ƩÎ ÀÚÁÖ »ýÇÑÙ.
#!/usr/bin/perl
ÇÁ¦Î ÀÎÅÍÇÁÅÍÀÇ ƩÎÀÎÁö ÈÀÎÇÑÙ.
Ç, CGI ÇÁÎ¥ÀÌ Ù¥ ȯƩ¯ö¦ »çëÇÑÙé ÄÄƢ ÀÌ ¯öµéÀ» ÇÁÎ¥Ô ÀüÇ ÇÑÙ.
CGI ÇÁÎ¥ÀÌ ÇÇÏ Ʃì ëÎ ÇÁÎ¥ ÀÚà Á¦ҡשÀÌÙ. ¯È ÀÀÇ µÎƢÁö Çö¦ ÇÏÁö ÊÒí ÀÌ ÛÀ» èÓ í ÀÖÙé õõí Ù. ÕÀú À¥ö ÇÇàÇÏâ Àü íÉÇà ÇÁÎ¥À» ÇÇàÇ»Ù. ¦ µéî, ÙÀú ơÀÌ ÇÇàÇÑÙ.
cd /usr/local/apache2/cgi-bin
./first.pl
(perl
ÀÎÅÍÇÁÅͦ ÇÇàÇÏÁö Ңó. ©ú ÄÄ ũ àÁÙ ÀÖ ƩÎ Á¦ »çëÇÏ© ÀÎÅÍÇÁÅͦ ã ÇÑÙ.)
ÇÁÎ¥À Á¦ÀÏ ÕÀú Content-Type
À» ÇÔÇÑ HTTP ÇìõµéÀ» ÃâÂÇÏí ó ÁÙÀ» ÃâÂÇ ÇÑÙ. Ù¥ ÍÀ» ÃâÂÇÑÙé À¥ö ÇÇàÇÒ Ʃì ÄÄ Premature end of script headers
¦ ÝȯÇÑÙ. ÀÚÇÑ »ëÀ ÀÀÇ CGI ÇÁÎ¥ ÀÛÇÏ⦠ÂüíÇÏó.
Àù ΠçÅ íÀÌÙ. «Ƣ ÀµÇé Àù Î 硾Ƣ »ýäÙ. Àù Φ Á¦ÀÏ ÕÀú »ììÁ ÇÑÙ. À¥»çÀÌ碬¦ È£ÃÇÏ ơ Àù Φ Áö ÇÏÔ ÇÑÙé, µµ Ù¥ æ ËÁ ÇÑÙ. Àù Φ  ýÀ» ÀÍÈé, ëÎÀÇ Á¦¦ » ÄÇÇÏ© ÇáÇÒ ö ÀÖÙ.
suexec Áö ÇÁÎ¥À» »çëÇÏé îҩ Ƣ»óÈ£ ÈÀ îҩ »çëÀÚ µÅä碯 ÀÖÂÁö µûó CGI ÇÁÎ¥À» Ù¥ »çëÀÚ ÇÇÑÀÎ ÇÇàÇÒ ö ÀÖÙ. Suexec Åì öÝÇÏÔ ÇÇÑÀ» Ë»çÇÏç, Ë»ç¦ ÇÏóµµ ÅëúÇÏÁö ÇÏé CGI ÇÁÎ¥À» ÇÇàÇÏÁö Êí Premature end of script headers
¦ ÝȯÇÑÙ.
suexec¦ »çëÇÏí ÀÖÂÁö ËÁé apache2ctl -V
¦ ÇÇàÇÏ© SUEXEC_BIN
ÀĦ ÈÀÎÇÑÙ. ÄÄƢ ÃÀÛÇÒҡ ÀåÒ suexec ÇÇàÄÀÏÀ» ƩÇÏé, suexec¦ »çëÇÒ ö ÀÖÙ.
suexec¦ ÏÀüÈ ÀÌÇÇÏÁö ÇÙé »çëÇ ȵÈÙ. suexec¦ »çëÇÏÁö ÊÀÁé SUEXEC_BIN
ÀÄ ÀÖÂ suexec
ÇÇàÄÀÏÀ» Áöìí (ÈÀ ÄÀÏíÀ» ÙÙí) ö¦ ÀçÃÀÛÇÏé µÈÙ. suexec ëÇ ÀÀ ÙÀ µµ »çëÇÏí ÍÙé, suexec -V
¦ ÇÇàÇÏ© suexec ÎÄÀÏ ÀĦ Ë»í ÎÄÀÏ çÅÀÌ îҩ ÔÄ¢À» îâí ÀÖÂÁö ãÂÙ.
CGI ÇÁÎÖ ÀÍÇÁúöÏ µÚ úîÁö ÀÏÀ» ÀÌÇÇÏé µµòÀÌ µÈÙ. ÃÀûÀÎ êóìÀúÍ öƢ Î ÅëÅÇÏ ýÀ» »ÇÏ ÍÀÌÙ. ôóµµ "Hello, World."¦ ÃâÂÇÏ ÇÁÎ¥À» ÀÛÇÒ ö ÀÖÁö ÀÌ ÇÁÎ¥À ơÎ µƢ âҡשÀÌÙ.
ȯƩ¯ö çÅÀÌ ÄÄÇ»Åͦ »çëÇÏ µÈ çÅ ÁÖÀע¦ ҡƢÙÏ ƨÀÌÙ. ȯƩ¯ö path (ÄÄÇ»ÅÍƢ çÅÀÌ ÀÔÂÇÑ íÉî ÇçÇÏ ÇÁ¦ ÄÀÏÀ» ã ÀåÒ), »çëÀÚí, ÅÍÌÎ ÁùÍ ơÀÌ À¯ëÇÑ ÁÙ. ÀÏÝÀûÀΠȯƩ¯ö¦ µÎ Áé íÉÇà ÇÁÒÇÁ碯 env
¦ ÀÔÂÇÑÙ.
CGI¦ ÇÇàÇÒҡµµ öÍ êóìÀú ¢ÀÚÀÇ È¯Ʃ¯ö¦ ΠȯÇÑÙ. ÀÌ Á êóìÀú Áù (Netscape, IE, Lynx), ö Áù (ÄÄ, IIS, WebSite), ÇÇàÇÏ CGI ÇÁÎ¥í µîÀÌ ÀÖÙ.
CGI ÇÁÎÓ ÀÌ ¯öµéÀ» »çëÇÒ ö ÀÖí, ȯƩ¯ö ŬóÀÌ-ö ÅëÅ ÀÏÎÀ» ÂÁöÇÑÙ. Àüà ÇÊö ¯ö ñÏÀ http://hoohoo.ncsa.uiuc.edu/cgi/env.html ÀÖÙ.
£ÜÇÑ Perl CGI ÇÁÎ¥À ÀÚÅÔ ÀüµÈ µç ȯƩ¯ö¦ ©ÁÙ. ÄÄ è»ÀÇ cgi-bin
µÅä碯 ÀÌÍ ñÁÇÑ ÇÁÎ¥ÀÌ µÎƩ ÀÖÙ. îî ¯ö ÇÊöÀÌí ÓÁö ÅÃÀûÀÌÙ. ƩÄ ñÏ Â ¯öµµ ÀÎÙ. Ç, ÄÄ â»ÀûÀÎ Á¦ƩÇÏ ȯƩ¯ö Ü ©¯ƢÁö ýÀÎ ÁÁ¢ ȯƩ¯ö¦ ÃƢÇÒ ö ÀÖÙ.
#!/usr/bin/perl
print "Content-type: text/html\n\n";
foreach $key (keys %ENV) {
print "$key --> $ENV{$key}<br>";
}
Ç, öÍ Å¬óÀÌ碥 ǥÁÀÔÂ(STDIN
)ú Ç¥ÁÃâÂ(STDOUT
)ÀÎ ÅëÅÇÑÙ. ÀÏ»óÀûÀÎ Ʃì STDIN
À Åƨµå ÇÁÎ¥ÀÌ ÃÇÏ ÄÀÏÀ» Å»í, STDOUT
À Åë ÄÜÖÀÌ ÈéÀ» ҩÇÑÙ.
CGI ÇÁÎ¥Ô À¥ çÄ(form)À» POST
ÇÏé çÄ ÀÔÂÇÑ ÀÚᦠ¯ÇÑ ÇüÄÀÎ î CGI ÇÁÎ¥ÀÇ STDIN
ÀÎ ÀüÇÑÙ. ¯é ÇÁÎ¥À Åƨµå ÄÀÏ òÀ ÀÚᦠÃÇϵíÀÌ ÀÚᦠÃÇÒ ö ÀÖÙ.
"¯ÇÑ ÇüÄ"À Åì £ÜÇÏÙ. Çñ ÀÌסú ƨÀ» µîÈ£(=)Î ¬áÇÏí, Çñ ÀÌסú ƨÀÇ ÖµéÀ» Î Û»µå(&)Î ¬áÇÑÙ. Ʃé, ÚÛ»µå, µîÈ£ ơÀ ÎÀÚ¬¯î ÀÚ ȥµÇÏÁö ʵµÏ 16ÁöÎ ¯È¯ÇÑÙ. ÏÀüÇÑ ÀÚá ÀÚÀ ÙÀú ơÀÌ »ýåÙ.
name=Rich%20Bowen&city=Lexington&state=KY&sidekick=Squirrel%20Monkey
ÁÁ URL µÚ ÀÌ ÀÚÀ» Ô µÈÙ. ÀÌ Ʃì ö ÀÚÀ» QUERY_STRING
ÀÌó ȯƩ¯ö ÀúÀåÇÑÙ. À̦ GET
äûÀÌóí ÇÑÙ. FORM
ÅÂÀÇ METHOD
ÓÀ» ÁöÁÇÏ© HTML çÄ(form)ÀÌ ÀÚᦠGET
ÇÒÁö POST
ÇÒÁö áÁÇÑÙ.
ÀÌÁ¦ ÇÁÎ¥À ÀÌ ÀÚÀ» À¯ëÇÑ ÁÎ ÂÉƩ ÇÑÙ. ÙÇàȵµ ÀÌ ÀÚá Ã碬¦ µí CGI ÇÁÎ¥ÀÇ Ù¥ ©¯ éÀ» »ìÇÇ óÀÌê¯碯Í µâµéÀÌ ÀÖÙ.
CGI ÇÁÎ¥À» ÀÛÇÒҡ ÁöçÇÑ ÀÛÀ» ëÅÇÁÖ ÄÚµå óÀÌê¯ ÈÀ µâÀ» »çëÇÒÁö íÁÇÁ ÇÑÙ. ÀÌ ÍÀ» »çëÇÏé öƢ ÁÙí õ » ÇÁÎ¥À» ƩÇÒ ö ÀÖÙ.
PerlÎ CGI ÇÁÎ¥À» ÀÛÇÑÙé AN üà µâµéÀ» ãÀ» ö ÀÖÙ. CGI Ʃ ƢÀå Î »çëµÇ µâÀ CGI.pm
ÀÌÙ. ëÎÀÇ ÇÁÎ¥ ÃÇÑ ÃÖÒ âÉÀ» ÇöÇÑ CGI::Lite
µµ íÁÇ ö ÀÖÙ.
CÎ CGI ÇÁÎ¥À» ÀÛÇÑÙé ÅÃÀÇ ©ÁöƢ Ù. ÀÌÁ ÇÏƢ http://www.boutell.com/cgic/ ÀÖ CGIC
óÀÌê¯碥Ù.
À¥ Åì À CGI ÁƢ ÀÖÙ. ì comp.infosystems.www.authoring.cgi ©¯ »çҡµéú CGI Á¦¦ íÀÇÇÒ ö ÀÖÙ. HTML Writers GuildÀÇ -servers Àϵ碥 Áú碯 ëÇÑ äÀ» ãâ ÈÇ¢ÇÑ ÀåÒÙ. http://www.hwg.org/lists/hwg-servers/ õ À ÍÀ» Ë ö ÀÖÙ.
í ơ CGI ÇÁÎ¥ µÀÛ ëÇÑ µç »ëÀ» íÇÑ CGI ÔàÀ» Àî ÇÒÁöµµ ¥Ù. NCSA » Ƣ ÀÖí, öÁÇÑ ÃÊÈÀ Common Gateway Interface RFC ÇÁÎÁר ÀÖÙ.
Àϵ ì ÇöÀç Ýí ÀÖ CGI Á¦ ëÇ ÁúÇÒҡע »ýÇÑ Çö»óú âëÇÑ áú, ÇÁ¦Î »ýÇÑ Çö»óÀÌ î»Ô Ù¥Áö, »çëÇÏ ö, CGI ÇÁÎ¥À» ÀÛÇÑ î, ƢÉÇÏé Çç ÄÚµå¦ ÀÚÈ Àûîó. ¯é ÇáÃ¥À» ã⠬öÁÙ.
ÄÄ ÒÄÚµåƢ ÀµÇúÙí ÈÅÇÏÁö Ê ÇÑ CGI ÁúÀ» ÄÄ ö µ¥ÀÌÅÍ£ÀÌ Ã碬é ÀýëΠȵÈÙ.
ƢÉÇÑ î: ko