TwistedでCGIの動作するWebサーバを書いてみる

| | Comments (0) | TrackBacks (0)
HDEラボの桜井です。
最近は新型インフルエンザによるパンデミックが気になっています。

今日は、TwistedでCGIが動くWebサーバを書いてみます。

まず、仕様を簡単に説明します。

  • TCP:48080ポートで稼働
  • 動作するサーバの"cgi"ディレクトリでCGIプログラムが動作
  • 画像は動作するサーバの"image"ディレクトリで"image"というURLで公開
  • CGIプログラムの他にPHPも動作させてみる

では、さっそくソースを見てみましょう。
サーバのファイル名は、「TestWebServer.tac」とします。
from twisted.application import internet, service
from twisted.web import error, server, twcgi, static

cgi_path = './cgi'
image_path = './image'
port = 48080

# ディレクトリにファイルがない場合、ディレクトリ一覧を表示しない
class NoDirectoryListFile(static.File):
  def directoryListing(self):
    return error.ForbiddenResource()

# PHP5が動作するように
class PHP5Script(twcgi.PHPScript):
  filter = '/usr/bin/php-cgi'

res = static.File(cgi_path)

# 画像表示用のサブディレクトリ
res.putChild('image', NoDirectoryListFile(image_path))

# ファイル名を指定しない場合、index.cgiを実行するように設定
res.indexNames = ['index.cgi', 'index.html']

# .cgiはCGIプログラムとして、.phpはPHPプログラムとして動作するように設定
res.processors = {'.cgi': twcgi.CGIScript, '.php': PHP5Script}
site = server.Site(res)

# デーモンとして起動
myServer = internet.TCPServer(port, site)
application = service.Application('cgi_httpd')
myServer.setServiceParent(application)



このデーモンを動作させるためには、下記のようにします。
$ twistd -oy TestWebServer.tac

停止させる場合は、下記のようにします。
$ kill `cat twistd.pid`


ここで、注意点をひとつ。
PHPを動作させる場合、php.iniに下記の記述を追加する必要があります。
cgi.force_redirect = 0

0 TrackBacks

Listed below are links to blogs that reference this entry: TwistedでCGIの動作するWebサーバを書いてみる.

TrackBack URL for this entry: http://lab.hde.co.jp/blog/mt-tb.cgi/86

Leave a comment

About this Entry

This page contains a single entry by Takeshi SAKURAI published on January 21, 2009 12:22 PM.

Fedora10のAstersik was the previous entry in this blog.

Pythonテンプレートエンジン Mako is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.