Apache HTTP サームãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.2
関連モジュール | 関連ディレクティブ |
---|---|
CGI (Common Gateway Interface) ã¯ã€ã‚¦ã‚§ãƒ–サーãƒãŒ コンテンツ生æˆã‚’ã™ã‚‹å¤–部プãƒã‚°ãƒ©ãƒ ã¨å”調ã—ã¦å‹•作ã™ã‚‹ãŸã‚ã®æ–¹æ³•ã‚’ 定義ã—ã¦ã„ã¾ã™ã€‚ãã®ãƒ—ãƒã‚°ãƒ©ãƒ ã¯ã—ã°ã—ã° CGI プãƒã‚°ãƒ©ãƒ ã‚„ CGI スクリプトã¨å‘¼ã°ã‚Œã¾ã™ã€‚CGI ã¯ã€ã‚¦ã‚§ãƒ–サイトã«å‹•的㪠コンテンツを置ããŸã‚ã®æœ€ã‚‚ç°¡å˜ã§ä¸€èˆ¬çš„ãªæ–¹æ³•ã§ã™ã€‚ã“ã®ãƒ‰ã‚ュメントã¯ã€ Apache ウェブサーãƒã§ CGI ã‚’è¨å®šã—〠CGI プãƒã‚°ãƒ©ãƒ を書ãå§‹ã‚ã‚‹ãŸã‚ã®å…¥é–€æ›¸ã¨ãªã‚‹ã§ã—ょã†ã€‚
CGI プãƒã‚°ãƒ©ãƒ ã‚’æ£ã—ã動作ã•ã›ã‚‹ã«ã¯ã€CGI を許å¯ã™ã‚‹ã‚ˆã†ã« Apache ã®è¨å®šã‚’行ã†å¿…è¦ãŒã‚りã¾ã™ã€‚ ã“れを行ãªã†ãŸã‚ã®æ–¹æ³•ãŒã„ãã¤ã‹ã‚りã¾ã™ã€‚
ScriptAlias
ディレクティブを使用ã—ã¦ã€
CGI プãƒã‚°ãƒ©ãƒ 用ã®ç‰¹åˆ¥ãªåˆ¥ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’ Apache ã«è¨å®šã—ã¾ã™ã€‚
Apache ã¯ã€ã“ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªä¸ã®å…¨ã¦ã®ãƒ•ァイルを CGI
プãƒã‚°ãƒ©ãƒ ã§ã‚ã‚‹ã¨ä»®å®šã—ã¾ã™ã€‚
ãã—ã¦ã€ã“ã®ç‰¹åˆ¥ãªãƒªã‚½ãƒ¼ã‚¹ãŒã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‹ã‚‰è¦æ±‚ã•れるã¨ã€
ãã®ãƒ—ãƒã‚°ãƒ©ãƒ ã®å®Ÿè¡Œã‚’試ã¿ã¾ã™ã€‚
ScriptAlias
ディレクティブã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ä½¿ç”¨ã—ã¾ã™:
ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
デフォルトä½ç½®ã« Apache をインストールã—ãŸãªã‚‰ã°ã€
ã“ã®ä¾‹ã¯ãƒ‡ãƒ•ォルト状態㮠httpd.conf
è¨å®šãƒ•ァイルã«å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚
ScriptAlias
ディレクティブã¯ã€URL ã®å‰ã«ä»˜åŠ ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’定義ã™ã‚‹
Alias
ディレクティブã¨ã‹ãªã‚Šä¼¼ã¦ã„ã¾ã™ã€‚
Alias
㨠ScriptAlias
ã¯é€šå¸¸ã€DocumentRoot
ディレクトリ外ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚
Alias
㨠ScriptAlias
ã¨ã®å·®ã¯ã€ScriptAlias
ãŒæŽ¥é 辞ã§å§‹ã¾ã‚‹ã™ã¹ã¦ã®
URL 㯠CGI プãƒã‚°ãƒ©ãƒ ã¨ã¿ãªã•れるã¨ã„ã†è¿½åŠ ã®æ„味をå«ã‚“ã§ã„ã‚‹ã“ã¨ã§ã™ã€‚
従ã£ã¦ã€ä¸Šè¨˜ã®ä¾‹ã§ã¯ã€/cgi-bin/
ã§å§‹ã¾ã‚‹ãƒªã‚½ãƒ¼ã‚¹ã¸ã®ã‚らゆるリクエストã«å¯¾ã—ã¦ã€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒª
/usr/local/apache2/cgi-bin/
ã‹ã‚‰æä¾›ã—ã€ãれらを
CGI プãƒã‚°ãƒ©ãƒ ã¨ã—ã¦æ‰±ã†ã‚ˆã† Apache ã«ç¤ºã—ã¾ã™ã€‚
例ãˆã°ã€URL http://www.example.com/cgi-bin/test.pl
ãŒè¦æ±‚ã•れãŸå ´åˆã€Apache 㯠ファイル
/usr/local/apache2/cgi-bin/test.pl
を実行ã—ã€ãã®å‡ºåŠ›ã‚’è¿”ã™ã“ã¨ã‚’試ã¿ã¾ã™ã€‚
ã‚‚ã¡ã‚ã‚“ã€ãƒ•ァイルãŒå˜åœ¨ã—ã€å®Ÿè¡Œå¯èƒ½ã§ã‚ã‚Šã€æ±ºã‚ã‚‰ã‚ŒãŸæ–¹æ³•ã§å‡ºåŠ›ã‚’è¿”ã—ã¾ã™ã€‚
ãã†ã§ãªã‘れã°ã€Apache ã¯ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’è¿”ã—ã¾ã™ã€‚
CGI プãƒã‚°ãƒ©ãƒ ã¯ã€ã‚»ã‚ュリティ上ã®ç†ç”±ã‹ã‚‰
ScriptAlias
ã•れãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«åˆ¶é™ã•れるã“ã¨ãŒã—ã°ã—ã°ã‚りã¾ã™ã€‚ã“ã®æ–¹æ³•ã«ã‚ˆã‚Šã€
CGI プãƒã‚°ãƒ©ãƒ を使用ã§ãるユーザを管ç†è€…ãŒå޳ã—ã制御ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
ã—ã‹ã—ãªãŒã‚‰ã€é©åˆ‡ãªã‚»ã‚ュリティ事å‰å¯¾ç–ãŒã¨ã‚‰ã‚Œã‚‹ãªã‚‰ã°ã€CGI
プãƒã‚°ãƒ©ãƒ ã‚’ä»»æ„ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§å®Ÿè¡Œã§ããªã„よã†ã«ã™ã‚‹ç†ç”±ã¯ã‚りã¾ã›ã‚“。
例ãˆã°ã€ãƒ¦ãƒ¼ã‚¶ã« UserDir
ディレクティブã§å½¼ã‚‰ã®ãƒ›ãƒ¼ãƒ ディレクトリé…下ã«ã‚¦ã‚§ãƒ–コンテンツをæŒãŸã›ãŸã„ã¨ã—ã¾ã™ã€‚
ã‚‚ã—ã€å½¼ã‚‰ãŒ CGI プãƒã‚°ãƒ©ãƒ ã‚’æŒã¤ã“ã¨ã‚’望んã§ã„ã¦ã‚‚ã€ãƒ¡ã‚¤ãƒ³ã®
cgi-bin
ディレクトリã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ãŒã§ããªã„å ´åˆã€
CGI プãƒã‚°ãƒ©ãƒ を実行ã™ã‚‹ã“ã¨ãŒã§ãã‚‹ä»–ã®å ´æ‰€ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚
ä»»æ„ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ CGI ã®å®Ÿè¡Œã‚’許å¯ã™ã‚‹ã«ã¯äºŒæ®µéšŽã®è¨å®šãŒå¿…è¦ã§ã™ã€‚
ã¾ãšã€AddHandler
ã‚„ SetHandler
ディレクティブã«ã‚ˆã£ã¦
cgi-script
ãƒãƒ³ãƒ‰ãƒ©ãŒå¯èƒ½ã«ãªã£ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
次ã«ã€Options
ディレクティブã§
ExecCGI
ãŒæŒ‡å®šã•れã¦ã„ãªã‘れã°ãªã‚Šã¾ã›ã‚“。
サーãƒã®ãƒ¡ã‚¤ãƒ³ã®è¨å®šãƒ•ァイルä¸ã§ Options
ディレクティブを明示的ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ã§ã€ç‰¹å®šã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªé…下ã§
CGI ã®å®Ÿè¡Œã‚’許å¯ã™ã‚‹ã‚ˆã†ã«æŒ‡å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™:
<Directory /usr/local/apache2/htdocs/somedir>
Options +ExecCGI
</Directory>
上記ディレクティブã¯ã€CGI ファイルã®å®Ÿè¡Œã‚’å¯èƒ½ã«ã™ã‚‹ã‚ˆã†
Apache ã«ä¼ãˆã¾ã™ã€‚ã¾ãŸã€ã©ã®ãƒ•ァイル㌠CGI ファイルã‹ã‚’
サーãƒã«ä¼ãˆã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚次ã®
AddHandler
ディレクティブã®ä¾‹ã§ã¯ã€cgi
ã¾ãŸã¯ pl
ã‚’æ‹¡å¼µåã«æŒã¤ã™ã¹ã¦ã®ãƒ•ァイルを CGI
プãƒã‚°ãƒ©ãƒ ã¨ã—ã¦ã¿ãªã™ã“ã¨ã‚’サーãƒã«ä¼ãˆã¾ã™:
AddHandler cgi-script .cgi .pl
.htaccess
ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«
㯠httpd.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 プãƒã‚°ãƒ©ãƒ を書ãã“ã¨ã¯ã€ ã‚ãªãŸãŒæ›¸ã„ã¦ã„ã‚‹ä»–ã®ãƒ—ãƒã‚°ãƒ©ãƒ ã¨ã‚ˆãä¼¼ã¦ã„ã‚‹ã§ã—ょã†ã€‚
次ã«ç¤ºã™ã®ã¯ã€ãƒ–ラウザ㫠1 行å°å—ã™ã‚‹ CGI
プãƒã‚°ãƒ©ãƒ ã®ä¾‹ã§ã™ã€‚以下を入力ã—ã€first.pl
ã¨ã„ã†ãƒ•ァイルã«ä¿å˜ã—ã€ãれを cgi-bin
ディレクトリã«ç½®ã„ã¦ãã ã•ã„。
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, World.";
Perl ã«ç²¾é€šã—ã¦ã„ãªãã¦ã‚‚ã€
何ãŒèµ·ã“ã‚‹ã‹ã‚’ç†è§£ã™ã‚‹ã“ã¨ã¯ã§ãã‚‹ã§ã—ょã†ã€‚1 行目ã¯ã€
/usr/bin/perl
ã§è¦‹ã¤ã‘られるインタプリタã«
ã“ã®ãƒ•ァイルを供給ã™ã‚‹ã“ã¨ã§ã“ã®ãƒ—ãƒã‚°ãƒ©ãƒ ãŒå®Ÿè¡Œã•れるã“ã¨ã‚’
Apache ã« (シェル上ã§å®Ÿè¡Œã—よã†ã¨ã—ã¦ã„ã‚‹ãªã‚‰ã°ã€ãã®ã‚·ã‚§ãƒ«ã« )
示ã—ã¾ã™ã€‚2 行目ã¯ã€å‰è¿°ã—ãŸã¨ãŠã‚Š content-type ã®å®šç¾©ã‚’å°å—ã—ã¾ã™ã€‚
ã“れã«ã¯å¾©å¸°æ”¹è¡Œã®äºŒã¤ã®çµ„を後ã«ä»˜åŠ ã—ã¾ã™ã€‚
ã“れã«ã‚ˆã‚Šã€ãƒ˜ãƒƒãƒ€ã®çµ‚りã«ç©ºè¡ŒãŒç½®ã‹ã‚Œã€HTTP
ヘッダã®çµ‚りã¨ãƒœãƒ‡ã‚£ã®å§‹ã¾ã‚Šã‚’示ã—ã¾ã™ã€‚3 行目ã¯ã€"Hello, World."
ã¨ã„ã†æ–‡å—列をå°å—ã—ã€ã“れã§çµ‚りã¨ãªã‚Šã¾ã™ã€‚
好ã¿ã®ãƒ–ラウザを開ãã€ã‚¢ãƒ‰ãƒ¬ã‚¹
http://www.example.com/cgi-bin/first.pl
ã‚ã‚‹ã„ã¯ãƒ•ァイルを置ã„ãŸãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚’指定ã™ã‚‹ã¨ã€
Hello, World.
ã¨ã„ㆠ1 行ãŒãƒ–ラウザウィンドã«ç¾ã‚Œã‚‹ã§ã—ょã†ã€‚
ãれã¯ã‚ã¾ã‚Šã‚¨ã‚サイティングãªã“ã¨ã§ã¯ã‚りã¾ã›ã‚“。
ã—ã‹ã—ã€ã“れãŒã†ã¾ãå‹•ã‘ã°ã€
ä»–ã®ã©ã®ã‚ˆã†ãªã‚‚ã®ã§ã‚‚å‹•ã‹ã™ã“ã¨ãŒã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚
ウェブã‹ã‚‰ CGI プãƒã‚°ãƒ©ãƒ ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’行ãªã£ãŸã¨ã〠ブラウザã§è¦‹ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹å››ã¤ã®åŸºæœ¬çš„ãªã“ã¨ãŒã‚りã¾ã™:
Content-Type
ã‚’ CGI プãƒã‚°ãƒ©ãƒ 内ã§
セットã—ãŸã‹ã‚’確èªã—ã¦ãã ã•ã„。サーãƒã¯ã‚ãªãŸã®æ¨©é™ã§å®Ÿè¡Œã•れã¦ã„ãªã„ã®ã‚’忘れãªã„よã†ã«ã€‚
ã¤ã¾ã‚Šã€èµ·å‹•ã™ã‚‹ã¨ãã€ã‚µãƒ¼ãƒã¯ç‰¹æ¨©ã‚’ã‚‚ãŸãªã„ユーザ - 通常 nobody
ã‚„ www
ã®æ¨©é™ã§å®Ÿè¡Œã•れã¾ã™ã€‚ã—ãŸãŒã£ã¦ã€ã‚ãªãŸãŒæ‰€æœ‰ã™ã‚‹
ファイルを実行ã™ã‚‹ã«ã¯åˆ¥ã®ãƒ‘ーミッションãŒå¿…è¦ã¨ãªã‚Šã¾ã™ã€‚
通常ã€nobody
ãŒå®Ÿè¡Œã™ã‚‹ã®ã«å分ãªãƒ‘ーミッションを与ãˆã‚‹æ–¹æ³•ã¯ã€
ファイルã«èª°ã§ã‚‚実行å¯èƒ½ã¨ã™ã‚‹ãƒ‘ーミッションを与ãˆã‚‹ã“ã¨ã§ã™:
chmod a+x first.pl
ã¾ãŸã€ã‚‚ã—ã‚ãªãŸã®ãƒ—ãƒã‚°ãƒ©ãƒ ãŒä»–ã®ãƒ•ァイルをèªã¿æ›¸ãã™ã‚‹ãªã‚‰ã°ã€ ãれらã®ãƒ•ァイルã¯ã€ã“れãŒå¯èƒ½ã¨ãªã‚‹æ£ã—ã„パーミッション ã‚’æŒã£ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
コマンドラインã‹ã‚‰ãƒ—ãƒã‚°ãƒ©ãƒ を実行ã™ã‚‹ã¨ãã€
æ„è˜ã—ãªãã¦ã‚‚ã‚·ã‚§ãƒ«ã«æ¸¡ã•ã‚Œã‚‹æƒ…å ±ãŒã‚りã¾ã™ã€‚
例ãˆã°ã€å‚ç…§ã™ã‚‹ãƒ•ァイルã®ãŸã‚ã«ã©ã“を検索ã—ãŸã‚‰ã‚ˆã„ã‹ã‚’
シェルã«ä¼ãˆã‚‹ PATH
ãŒã‚りã¾ã™ã€‚
プãƒã‚°ãƒ©ãƒ ㌠CGI プãƒã‚°ãƒ©ãƒ ã¨ã—ã¦ã‚¦ã‚§ãƒ–サーãƒã«ã‚ˆã£ã¦å®Ÿè¡Œã•れるã¨ãã€
ãれã¯åŒã˜ PATH
ã§ã¯ãªã„ã‹ã‚‚ã—れã¾ã›ã‚“。
CGI プãƒã‚°ãƒ©ãƒ 内ã§å‘¼ã³å‡ºã™ã‚らゆるプãƒã‚°ãƒ©ãƒ
(例ãˆã°ã€sendmail
ã®ã‚ˆã†ãªã‚‚ã®) ã¯ã€
ãƒ•ãƒ«ãƒ‘ã‚¹ã§æŒ‡å®šã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã§ã—ょã†ã€‚ãれã«ã‚ˆã‚Šã€CGI
プãƒã‚°ãƒ©ãƒ を実行ã—よã†ã¨ã—ãŸã¨ãã€
シェルã¯ãã®ã‚ˆã†ãªãƒ—ãƒã‚°ãƒ©ãƒ を見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
åŒæ§˜ãªã“ã¨ã¯ã€ã‚¹ã‚¯ãƒªãƒ—トã®ã‚¤ãƒ³ã‚¿ãƒ—リタ (ã—ã°ã—ã° perl
)
ã¸ã®ãƒ‘スã§ã€CGI プãƒã‚°ãƒ©ãƒ ã® 1 è¡Œç›®ã«æ¬¡ã®ã‚ˆã†ã«ç¤ºã•れã¾ã™:
#!/usr/bin/perl
ã“れãŒã‚¤ãƒ³ã‚¿ãƒ¼ãƒ—リタã¸ã®å®Ÿéš›ã®ãƒ‘スã§ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¦ãŠãã¾ã™ã€‚
ã¾ãŸã€CGI プãƒã‚°ãƒ©ãƒ ãŒä»–ã®ç’°å¢ƒå¤‰æ•°ã«ä¾å˜ã—ã¦ã„ã‚‹å ´åˆã¯ã€ãã®ç’°å¢ƒå¤‰æ•°ãŒ Apache ã‹ã‚‰æ¸¡ã•れるよã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
CGI プãƒã‚°ãƒ©ãƒ ãŒå¤±æ•—ã™ã‚‹ã®ã¯å¤§æŠµã€ãƒ—ãƒã‚°ãƒ©ãƒ 自身ã«å•題ãŒã‚ã‚‹å ´åˆã§ã™ã€‚ 一度 CGI ã®ä½¿ã„方をç†è§£ã—ã€å‰è¿°ã®äºŒã¤ã®èª¤ã‚Šã‚’犯ã—ã¦ã„ãªã„ãªã‚‰ã°ã€ ã¾ãšé–“é•ã„ãªããã†ã§ã—ょã†ã€‚ブラウザを使ã£ã¦ãƒ†ã‚¹ãƒˆã™ã‚‹å‰ã« ã¾ãšç¢ºèªã™ã‚‹ã“ã¨ã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‹ã‚‰ãƒ—ãƒã‚°ãƒ©ãƒ ãŒå®Ÿè¡Œã§ãã‚‹ã“ã¨ã§ã™ã€‚ 例ãˆã°ã€ä»¥ä¸‹ã‚’実行ã—ã¦ã¿ã¦ãã ã•ã„:
cd /usr/local/apache2/cgi-bin
./first.pl
(perl
インタプリタã¯å‘¼ã°ãªã„ã§ãã ã•ã„。
シェル㨠Apache ãŒã‚¹ã‚¯ãƒªãƒ—ãƒˆã®æœ€åˆã®è¡Œã® ãƒ‘ã‚¹æƒ…å ± を使ã£ã¦è¦‹ã¤ã‘ã¾ã™ã€‚)
最åˆã«ãƒ—ãƒã‚°ãƒ©ãƒ ã‹ã‚‰å‡ºåŠ›ã•れるã®ã¯ Content-Type
ã‚’å«ã¿ã€
後ã«ç©ºè¡Œã®ç¶šã HTTP ヘッダã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。他ã®ã‚‚ã®ãŒå‡ºåŠ›ã•れã¦ã„ã‚‹
å ´åˆã¯ã€Apache ã¯ã“ã®ãƒ—ãƒã‚°ãƒ©ãƒ をサーãƒçµŒç”±ã§å®Ÿè¡Œã—よã†ã¨ã—ãŸã¨ãã«ã¯
Premature end of script headers
エラーを出力ã—ã¾ã™ã€‚詳細ã¯
上記㮠CGI プãƒã‚°ãƒ©ãƒ を書ã ã‚’èªã‚“ã§ãã ã•ã„。
エラーãƒã‚°ã¯å‹é”ã§ã™ã€‚ å…¨ã¦ã®ã†ã¾ãã„ã‹ãªã„ã“ã¨ã¯ã€ã‚¨ãƒ©ãƒ¼ãƒã‚°ã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’生æˆã—ã¾ã™ã€‚ å¿…ãšãれを最åˆã«è¦‹ã‚‹ã¹ãã§ã™ã€‚ ã‚‚ã—ã€ã‚ãªãŸãŒã‚¦ã‚§ãƒ–サイトを主催ã—ã¦ã„ã‚‹å ´æ‰€ãŒ ã‚¨ãƒ©ãƒ¼ãƒã‚°ã®å‚照を許ã—ã¦ã„ãªã„ãªã‚‰ã°ã€ãã£ã¨ä»–ã®ã‚µã‚¤ãƒˆã§ä¸»å‚¬ã™ã‚‹ã¹ãã§ã™ã€‚ エラーãƒã‚°ã®èªã¿æ–¹ã‚’å¦ã¶ã“ã¨ã§ã€ã»ã¨ã‚“ã©å…¨ã¦ã®å•題ãŒè¿…速ã«ç¢ºèªã•れ〠迅速ã«è§£æ±ºã•れるã¨ã„ã†ã“ã¨ãŒåˆ†ã‹ã‚‹ã§ã—ょã†ã€‚
suexec サãƒãƒ¼ãƒˆãƒ—ãƒã‚°ãƒ©ãƒ ã¯
ãƒãƒ¼ãƒãƒ£ãƒ«ãƒ›ã‚¹ãƒˆã‚„ユーザã®ãƒ›ãƒ¼ãƒ ディレクトリã®å ´æ‰€ã«ä¾ã£ã¦
CGI プãƒã‚°ãƒ©ãƒ ã‚’é•ã†ãƒ¦ãƒ¼ã‚¶æ¨©é™ã®ä¸‹ã§èµ°ã‚‰ã›ã‚‹ã“ã¨ã‚’å¯èƒ½ã«ã—ã¾ã™ã€‚
Suexec ã®æ¨©é™ã®ãƒã‚§ãƒƒã‚¯ã¯éžå¸¸ã«å޳ã—ãã€ãれを満ãŸã•ãªã„å ´åˆã¯
CGI プãƒã‚°ãƒ©ãƒ ㌠Premature end of script headers
エラーã§
実行ã•れã¾ã›ã‚“。
suexec を使ã£ã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’調ã¹ãŸã‚ã«ã¯ apachectl
-V
を実行ã—ã¦ã€SUEXEC_BIN
ã®å ´æ‰€ã‚’調ã¹ã¦ãã ã•ã„。
Apache ãŒãã“ã« suexec
ã®ãƒã‚¤ãƒŠãƒªã‚’発見ã—ãŸå ´åˆã¯ã€suexec ãŒ
使用ã•れã¾ã™ã€‚
suexec を完全ã«ç†è§£ã—ã¦ã„ãªã„é™ã‚Šã€ä½¿ã†ã¹ãã§ã¯ã‚りã¾ã›ã‚“。
suexec を無効ã«ã™ã‚‹ã«ã¯ã€SUEXEC_BIN
ã‹ã‚‰æŒ‡ã•れã¦ã„ã‚‹
suexec
ãƒã‚¤ãƒŠãƒªã‚’削除 (ã‹åå‰ã‚’変更) ã™ã‚‹ã ã‘ã§ã™ã€‚
suexec ã‚’èªã‚“ã 後ã§ã€ã¾ã ãれを
使ã„ãŸã„ã®ã§ã‚れã°ã€suexec -V
を実行ã—㦠suexec ã®
ãƒã‚°ãƒ•ァイルã®ä½ç½®ã‚’調ã¹ã€ãã®ãƒã‚°ãƒ•ァイルを使ã£ã¦ãƒãƒªã‚·ãƒ¼é•åã‚’
見ã¤ã‘ã¦ãã ã•ã„。
CGI プãƒã‚°ãƒ©ãƒŸãƒ³ã‚°ã«ç¿’熟ã™ã‚‹ã¨ã€ è£ã§èµ·ã“ã£ã¦ã„ã‚‹ã“ã¨ã«ã¤ã„ã¦æ›´ã«ç†è§£ã™ã‚‹ã“ã¨ã®å½¹ã«ç«‹ã¡ã¾ã™ã€‚ ブラウザã¨ã‚µãƒ¼ãƒãŒã©ã®ã‚ˆã†ã«ç›¸äº’通信ã™ã‚‹ã‹ã«ã¤ã„ã¦ã¯ç‰¹ã«ãã†ã§ã™ã€‚ ãªãœãªã‚‰ã€"Hello, World." ã‚’å°å—ã™ã‚‹ãƒ—ãƒã‚°ãƒ©ãƒ を書ãã“ã¨ã¯ãŠãŠã„ã«çµæ§‹ã§ã™ãŒã€ ãれã¯ç‰¹ã«æœ‰ç›Šã§ã¯ã‚りã¾ã›ã‚“。
環境変数ã¯ã€
ã‚ãªãŸãŒã‚³ãƒ³ãƒ”ュータを使ã†ã¨ãã«è¾ºã‚Šã«å˜åœ¨ã—ã¦ã„る値ã§ã™ã€‚
ãれらã¯ã€ãƒ‘ス
(コマンドをタイプã—ãŸã¨ãã«å®Ÿè¡Œã™ã‚‹å®Ÿéš›ã®ãƒ•ァイルを探ã—出ã™ã¨ã“ã‚)ã€
ユーザåã€ç«¯æœ«åž‹ãªã©ã®ã‚ˆã†ãªä¾¿åˆ©ãªã‚‚ã®ã§ã™ã€‚
é€šå¸¸ã€æ™®æ®µä½¿ç”¨ã—ã¦ã„る環境変数ã®å®Œå…¨ãªãƒªã‚¹ãƒˆã‚’調ã¹ã‚‹ã«ã¯ã€
コマンドプãƒãƒ³ãƒ—ト㧠env
を入力ã—ã¾ã™ã€‚
CGI ã®å‡¦ç†ä¸ã€ã‚µãƒ¼ãƒã¨ãƒ–ラウザも環境変数をè¨å®šã—〠ãれã«ã‚ˆã‚Šç›¸äº’ã«é€šä¿¡ã™ã‚‹ã“ã¨ãŒã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚ ãã®ç’°å¢ƒå¤‰æ•°ã¯ã€ãƒ–ラウザタイプ (Netscape, IE, Lynx)ã€ã‚µãƒ¼ãƒã‚¿ã‚¤ãƒ— (Apache, IIS, WebSite)ã€å®Ÿè¡Œã•れã¦ã„ã‚‹ CGI プãƒã‚°ãƒ©ãƒ ã®åå‰ãªã©ã§ã™ã€‚
ã“れらã®å¤‰æ•°ã¯ CGI プãƒã‚°ãƒ©ãƒžãŒä½¿ç”¨ã§ãã¾ã™ã€‚ ãã—ã¦ã€ãれã¯ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¨ã‚µãƒ¼ãƒã®é€šä¿¡ã®è©±ã®åŠåˆ†ã§ã™ã€‚ å¿…è¦ãªå¤‰æ•°ã®å®Œå…¨ãªãƒªã‚¹ãƒˆã¯ http://hoohoo.ncsa.uiuc.edu/cgi/env.html ã«ã‚りã¾ã™ã€‚
以下ã®å˜ç´”㪠Perl CGI
プãƒã‚°ãƒ©ãƒ ã¯ã€æ¸¡ã•れる全ã¦ã®ç’°å¢ƒå¤‰æ•°ã‚’表示ã—ã¾ã™ã€‚åŒæ§˜ã®ãƒ—ãƒã‚°ãƒ©ãƒ ã¯ã€
Apache ディストリビューション㮠cgi-bin
ディレクトリã«äºŒã¤å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚
ã„ãã¤ã‹ã®å¤‰æ•°ãŒå¿…é ˆã§ã‚りã€ã„ãã¤ã‹ã¯ä»»æ„ã§ã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。
ãã—ã¦ã€å…¬å¼ã®ãƒªã‚¹ãƒˆã«ã¯ãªã„ã„ãã¤ã‹ã®å¤‰æ•°ãŒè¡¨ç¤ºã•れã¦ã„ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。
ã•らã«ã€Apache ã¯ãƒ‡ãƒ•ォルトã§ç”¨æ„ã•れã¦ã„る基本的ãªã‚‚ã®ã«
ã‚ãªãŸè‡ªèº«ã®ç’°å¢ƒå¤‰æ•°ã‚’åŠ ãˆã‚‹ãŸã‚ã®ã€
多ãã®ç•°ãªã‚‹æ–¹æ³•を用æ„ã—ã¦ã—ã¾ã™ã€‚
#!/usr/bin/perl
print "Content-type: text/html\n\n";
foreach $key (keys %ENV) {
print "$key --> $ENV{$key}<br>";
}
サーãƒã¨ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆé–“ã®ã‚‚ã†ä¸€ã¤ã®é€šä¿¡ã¯ã€æ¨™æº–入力
(STDIN
)ã¨æ¨™æº–出力 (STDOUT
)
を通ã˜ã¦è¡Œãªã‚れã¾ã™ã€‚é€šå¸¸ã®æ–‡è„ˆã«ãŠã„ã¦ã€STDIN
ã¯ã‚ーボードやプãƒã‚°ãƒ©ãƒ ãŒå‹•作ã™ã‚‹ãŸã‚ã«ä¸Žãˆã‚‰ã‚Œã‚‹ãƒ•ァイルをæ„味ã—ã€
STDOUT
ã¯é€šå¸¸ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã¾ãŸã¯ã‚¹ã‚¯ãƒªãƒ¼ãƒ³ã‚’æ„味ã—ã¾ã™ã€‚
ウェブフォームã‹ã‚‰ CGI プãƒã‚°ãƒ©ãƒ ã¸POST
ã—ãŸã¨ãã€ãƒ•ォームã®ãƒ‡ãƒ¼ã‚¿ã¯ç‰¹åˆ¥ãªãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã§æŸãられã€
STDIN
を通ã—ã¦ã€CGI プãƒã‚°ãƒ©ãƒ ã«å¼•ãæ¸¡ã•れã¾ã™ã€‚
プãƒã‚°ãƒ©ãƒ ã¯ãƒ‡ãƒ¼ã‚¿ãŒã‚ーボード
ã‚‚ã—ãã¯ãƒ•ァイルã‹ã‚‰æ¥ã¦ã„ãŸã‹ã®ã‚ˆã†ã«å‡¦ç†ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
「特別ãªãƒ•ォーマットã€ã¯ã¨ã¦ã‚‚å˜ç´”ã§ã™ã€‚フィールドåã¨å€¤ã¯ã‚¤ã‚³ãƒ¼ãƒ« (=) ã§çµã°ã‚Œã¾ã™ã€‚ãã—ã¦å€¤ã®çµ„ã¯ã‚¢ãƒ³ãƒ‘サンド (&) ã§çµã°ã‚Œã¾ã™ã€‚ スペースã€ã‚¢ãƒ³ãƒ‘サンドã€ã‚¤ã‚³ãƒ¼ãƒ«ã®ã‚ˆã†ãªé¢å€’ãªæ–‡å—ã¯ã€ ãれらãŒå‹•作を駄目ã«ã—ãªã„よã†ã«ãã®æ–‡å—ã«ç›¸å½“ã™ã‚‹ 16 進ã«å¤‰æ›ã•れã¾ã™ã€‚ 全データ文å—列ã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™:
name=Rich%20Bowen&city=Lexington&state=KY&sidekick=Squirrel%20Monkey
時々ã€ã“ã®ã‚ˆã†ãªæ–‡å—列㌠URL
ã«ä»˜åŠ ã•れるã®ã‚’見るã§ã—ょã†ã€‚ãã®å ´åˆã€ã‚µãƒ¼ãƒã¯
QUERY_STRING
ã¨ã„ã†ç’°å¢ƒå¤‰æ•°ã«ãã®æ–‡å—列を入れã¾ã™ã€‚ãれã¯
GET
リクエストã¨å‘¼ã°ã‚Œã¾ã™ã€‚
HTML フォームã§ã¯ã€ãƒ‡ãƒ¼ã‚¿ã‚’渡ã™ãŸã‚ã« GET
ã¨
POST
ã®ã©ã¡ã‚‰ã‚’使用ã™ã‚‹ã‹ã‚’ã€FORM
ã‚¿ã‚°ã®
METHOD
属性ã®è¨å®šã§æŒ‡å®šã—ã¾ã™ã€‚
CGI プãƒã‚°ãƒ©ãƒ ã¯ã€ãã®æ–‡å—列を役ã«ç«‹ã¤æƒ…å ±ã«åˆ†å‰²ã™ã‚‹è²¬ä»»ãŒã‚りã¾ã™ã€‚ 幸ã„ã«ã‚‚ã€ãã®ãƒ‡ãƒ¼ã‚¿å‡¦ç†ã‚’助ã‘るライブラリやモジュールãŒå˜åœ¨ã—ã¾ã™ã€‚ ã“れらã¯ã€CGI プãƒã‚°ãƒ©ãƒ ã®ä»–ã®é¢ã§ã‚‚åŒæ§˜ã«å½¹ã«ç«‹ã¡ã¾ã™ã€‚
CGI プãƒã‚°ãƒ©ãƒ を書ãã¨ãã€é¢å€’ãªä»•事ã®å¤§éƒ¨åˆ†ã‚’ã—ã¦ãれる コードライブラリã¾ãŸã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使ã†ã“ã¨ã‚’検討ã™ã¹ãã§ã™ã€‚ ã“れã¯ã‚¨ãƒ©ãƒ¼ã‚’減らã—ã€æ—©ã„開発ã«ã¤ãªãŒã‚Šã¾ã™ã€‚
Perl ã§ CGI プãƒã‚°ãƒ©ãƒ を書ã„ã¦ã„ã‚‹ãªã‚‰ã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ CPAN ã§æä¾›ã•れã¦ã„ã¾ã™ã€‚
ã“ã®ç›®çš„ã®ãŸã‚ã®æœ€ã‚‚æ™®åŠã—ã¦ã„るモジュール㯠CGI.pm
ã§ã™ã€‚
CGI::Lite
も検討ã—ã¾ã—ょã†ã€‚ã“れã¯ã€ã»ã¨ã‚“ã©ã®ãƒ—ãƒã‚°ãƒ©ãƒ
ã«ãŠã„ã¦å¿…è¦ã¨ã™ã‚‹ã™ã¹ã¦ã®æ©Ÿèƒ½ã®æœ€å°ã‚»ãƒƒãƒˆã®å®Ÿè£…ã§ã™ã€‚
C ã§ CGI プãƒã‚°ãƒ©ãƒ を書ã„ã¦ã„ã‚‹ãªã‚‰ã€ã„ã‚ã„ã‚ãª
オプションãŒã‚りã¾ã™ã€‚ã“れらã®å†…ã®ä¸€ã¤ã¯ http://www.boutell.com/cgic/
ã§æä¾›ã•れã¦ã„ã‚‹ CGIC
ライブラリã§ã™ã€‚
CGI ã«é–¢ã™ã‚‹æƒ…å ±ã¯ã‚¦ã‚§ãƒ–ã§æ•°å¤šãæä¾›ã•れã¦ã„ã¾ã™ã€‚CGI ã®å•題ã«ã¤ã„ã¦ã¯ Usenet ã® comp.infosystems.www.authoring.cgi ã§ã€ ä»–ã®ãƒ¦ãƒ¼ã‚¶ã¨è«–è°ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚HTML Writers Guide ã® -servers メーリングリストã¯ã€ã‚ãªãŸã®è³ªå•ã«å›žç”ã—ã¦ãれるå‰å¤§ãªãƒªã‚½ãƒ¼ã‚¹ã§ã™ã€‚ http://www.hwg.org/lists/hwg-servers/ ã§æ›´ã«å¤šãを探ã—出ã™ã“ã¨ãŒã§ãã¾ã™ã€‚
ãã—ã¦ã‚‚ã¡ã‚ã‚“ã€ãŠãらã CGI プãƒã‚°ãƒ©ãƒ ã®å‹•作ã«é–¢ã™ã‚‹è©³ç´°ã®å…¨ã¦ãŒè¨˜è¿°ã•れã¦ã„ã‚‹ CGI ã®ä»•様をèªã‚€ã¹ãã§ã™ã€‚オリジナルãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ NCSA ã§ã€ã‚¢ãƒƒãƒ—デートã•れãŸãƒ‰ãƒ©ãƒ•トを Common Gateway Interface RFC プãƒã‚¸ã‚§ã‚¯ãƒˆã§å‚ç…§ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
CGI ã®å•題ã«ã¤ã„ã¦ã€åŠ ã‚ã£ã¦ã„るメーリングリストã¾ãŸã¯ãƒ‹ãƒ¥ãƒ¼ã‚¹ グループã«è³ªå•ã‚’é€ã‚‹ã¨ãã€èµ·ã“ã£ãŸã‚‚ã®ã€èµ·ã“ã£ã¦ã»ã—ã„ã“ã¨ã€ 実際ã«èµ·ã“ã£ãŸã“ã¨ãŒã©ã†é•ã†ã‹ã€ä½¿ç”¨ã—ã¦ã„るサーãƒã€ CGI プãƒã‚°ãƒ©ãƒ を記述ã—ã¦ã„る言語ã«é–¢ã™ã‚‹ååˆ†ãªæƒ…å ±ã¨ã€ å¯èƒ½ã§ã‚れã°å•題ã®ã‚³ãƒ¼ãƒ‰ã‚’æä¾›ã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。 ãã†ã™ã‚‹ã“ã¨ã§ã€å•題ãŒã‚ˆã‚Šé–“å˜ã«è¦‹ã¤ã‹ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚
Apache ã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã«ãŠã„ã¦å•題を発見ã—ãŸã“ã¨ã‚’確信ã—ã¦ã„ãªã„é™ã‚Šã€ CGI ã®å•題ã«é–¢ã™ã‚‹è³ªå•ã‚’ Apache ãƒã‚°ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«é€ã‚‹ã¹ãã§ãªã„ ã“ã¨ã«æ³¨ç›®ã—ã¦ãã ã•ã„。