[an error occurred while processing this directive] [APACHE DOCUMENTATION]

モジュール mod_fastcgi

このモジュールはmod_fastcgi.cファイルの中に含まれます。これはPerl, C, C++, Java, Pythonを含む、多様な言語でウェブサーバアプリケーションを書くためのCGIに代わる高性能を供給します。

どんなMIMEタイプのファイルからの要求でも、application/x-httpd-fcgimod_fastcgiによって処理されるでしょう。要求が実行されるためには、サーバのコンフィグレーションは、AppClass命令を使ってアプリケーション(実行ファイル)をスタートしなければなりません。

このモジュールは、Apache 1.2かそれ以上にオプションとして含まれます。

概要

FastCGIはCGIに代わる高性能なものです。FastCGIは、ウェブサーバが要求の間、アプリケーションの処理が走っている状態にすることによって、そのスピードを得ています。それでCGIとは異なり、新しい処理を始めるオーバーヘッドを持たず、誰かがドキュメントを要求するごとにアプリケーションを初期化(例えば、データベースへの接続)したりはしません。処理はウェブサーバと一緒に始めて、走り続けます。

FastCGIアプリケーションは単純な通信プロトコルを使ってウェブサーバと通信します。一つの全二重接続は、環境変数とstdinデータをアプリケーションと通信し、stdoutstderrデータをウェブサーバと通信します。

FastCGIについてのより多くの情報は、無料の有用なFastCGIサーバモジュールとアプリケーションライブラリをふくんでいます。FastCGI home page(http://www.fastcgi.com/).

命令


AppClass

Syntax: AppClass exec-path [-processes N] [-listen-queue-depth N] [-restart-delay N] [-priority N] [-initial-env name=value]
Context: srm.conf
Module: mod_fastcgi

AppClass命令は実行ファイルexec-pathを使って、一つかそれ以上のFastCGIアプリケーション処理を始めます。mod_fastcgiはwill restart these processes should they die.

クライアントがファイルのexec-pathを要求すると、要求はmod_fastcgiモジュールによって最初にハンドルされます。mod_fastcgiはレスポンスを生じるアプリケーションクラスの処理に対する要求を通信する。mod_fastcgiはクライアントに対してこのレスポンスを伝達します。

AppClass命令に対するオプションパラメータは以下の通りです:

AppClass命令に起こり得るエラーには、syntax errors、レンジ外の引数、ファイルexec-pathが存在しない、実行できない、ということを含みます。

FastCgiIpcDir

Syntax: FastCgiIpcDir dir-path
Context: srm.conf
Module: mod_fastcgi

FastCgiIpcDir命令は、管理するアプリケーションと通信して、mod_fastcgiがUnix-domainのソケットを作っている場所をコントロールします。

デフォルトでは、mod_fastcgi/tmpにソケットを作ります。ソケット名はnが連続数であり、pidがApacheの親処理の処理IDである、OM_WS_n.pidと表記します。もしシステムが/tmpからファイルを消去する周期的な処理を実行して、これらのファイルを消去すると、ウェブサーバはFastCGIと通信することが不可能になります。

この問題を避けるために、サーバコンフィグレーションのAppClass命令よりも前にFastCgiIpcDir命令を置きます。ウェブサーバで使うアカウントによって読み込み、書き込み、検索が可能で、しかしさもなくば誰も接続できないディレクトリを指定して下さい。

以下に記した注意は/tmpの外で動いているソケットでのplatform-specificの問題についてです;読んで下さい。


Important notes

  1. いくつかのプラットフォームで、Unixドメインソケットが非ローカルファイルシステムに記録されると、作動しません。デジタルUNIX 3.0はNFSに関してこの問題を持っていることが知られています。(デジタルUNIX 3.2では解決済);Solaris2.5はAFSに関して問題を持ってることが知られています。もし/tmpがローカルファイルシステムの一部なら、どこかにそれらを置くためにFastCgiIpcDir命令を使うよりも、むしろ/tmpに聞いているソケットを残すことによって、この問題を避けることが出来るでしょう。

  2. C library function fopenのバグのせいで、mod_fastcgi処理の管理者によるエラーログ記録は、いくつかのプラットフォーム上のエラーログを変造します。実際、SunOS 4.1.4はfopenバグを持っており、エラーログを変造する問題を示しています。変造されたエラーログはウェブサーバの問題をデバッグするのを困難にします。この問題を可能な限り排除するためにApache 1.1.1に以下のパッチを割り当てるべきです:
    % diff -c alloc.c alloc.c.orig
    *** alloc.c     Mon Sep 23 17:45:34 1996
    --- alloc.c.orig        Mon Sep 23 17:43:16 1996
    ***************
    *** 765,784 ****
      
      FILE *pfopen(struct pool *a, char *name, char *mode)
      {
    !   FILE *fd = NULL;
      
        block_alarms();
    !   if (*mode == 'a') {
    !     /* Work around faulty implementations of fopen */
    !     int baseFlag = (*(mode+1) == '+') ? O_RDWR : O_WRONLY;
    !     int desc = open(name, baseFlag | O_APPEND | O_CREAT,
    !             S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
    !     if (desc >= 0) {
    !       fd = fdopen(desc, mode);
    !     }
    !   } else {
    !     fd = fopen(name, mode);
    !   }
        if (fd != NULL) note_cleanups_for_file (a, fd);
        unblock_alarms();
        return fd;
    --- 765,774 ----
      
      FILE *pfopen(struct pool *a, char *name, char *mode)
      {
    !   FILE *fd;
      
        block_alarms();
    !   fd = fopen(name, mode);
        if (fd != NULL) note_cleanups_for_file (a, fd);
        unblock_alarms();
        return fd;
        
  3. ScriptAlias命令はAddType命令よりも優先します;ScriptAlias命令のターゲットであるディレクトリに置かれたファイル は、application/x-httpd-cgiを持っており、mod_cgiに よってハンドルされます。それ故、/cgi-bin/ディレクトリにFastCGI アプリケーションを置かないで下さい。それは正確には作動しません!

  4. mod_fastcgiは、DocumentRootの最後にスラッシュを置 くと混乱します。その症状は、AppClassの使用を定義したアプリケーションを要求ハンドラーが見つけられないことです。

  5. mod_fastcgiはオプションモジュールmod_envによって定義された環境変数については判りません。AppClassに対する-initial-envオプションを使って下さい。

  6. mod_fastcgiはFastCGIへのTCP/IP接続を実行せず、Unixドメインソケ ット接続だけを実行します。リモートFastCGIアプリケーションへの接続は、CGIスクリプトとしてcgi-fcgiプログラムを実行します。詳しくはcgi-fcgi manpageを参照して下さい。

    以下はApache 1.1.1の最小httpd.confとFastCGI Developer's Kit 1.5です。FastCGIとの初期テストにこのコンフィグレーションを使って下さい。このコンフィグレーションの処理が確認されると、自身のコンフィグレーションとこのコンフィグレーションのFastCGI-specific aspectsを結合することが出来ます。

    命令:

    1. $APACHEを、Apache 1.1.1 kitを含んでいるディレクトリ、すなわち Apache 1.1.1 READMEを含んでいるディレクトリのパス名に変更して下さい。例えば、$APACHE/udir/doe/apache_1.1.1に変更します。

      $FASTCGIを、FastCGI Developer's Kit 1.5を含んでいるディレクトリ、すなわちFastCGI Developer's Kit 1.5 READMEを含んでいるディレクトリのパス名を変更して下さい。例えば、$FASTCGI/udir/doe/fcgi-devel-kitに変更します。

      $APACHE/conf/httpd.confとして出力したファイルを保存します。

    2. mod_fastcgiでApache 1.1.1を構築して下さい。これはhttpdを実行可 能にします。

      FastCGI Developer's Kit 1.5を構築して下さい。これはFastCGIアプリケーションとして実行するechoを実行可能にし、このアプリケーションのecho.fcgリンクを作ります。このリンクは、が特有のMIME typeにそれを与えるのは、mod_fastcgiがそれをハンドルするからです。

    3. シェルで$APACHEとstart httpdにcdする:
          % src/httpd -f $APACHE/conf/httpd.conf
          

    4. URLにアクセスするためにブラウザを使う
          http://$YOUR_HOST:5556/examples/echo.fcg
          
      $YOUR_HOSTがホストが実行しているhttpdのIPアドレスがURLである。echo.fcgが示している初期環境のSTATE=TEXASを探して下さい。

    # httpd.conf -- minimal for mod_fastcgi
    #
    # One config file is plenty
    ResourceConfig /dev/null
    AccessConfig   /dev/null
    
    # Not starting httpd as root, so Port must be larger than 1023
    Port 5556
    
    # Configure just one idle httpd child process, to simplify debugging
    StartServers    1
    MinSpareServers 1
    MaxSpareServers 1
    
    # Tell httpd where it should live, turn on access and error logging
    ServerRoot     $APACHE
    ErrorLog       logs/error.log
    TransferLog    logs/access.log
    ScoreBoardFile logs/httpd.scoreboard
    
    # Tell httpd where to get documents
    # XXX: No slash allowed at the end of DocumentRoot
    DocumentRoot $FASTCGI
    
    # Tell Apache that mod_fastcgi should handle files ending in .fcg
    AddType application/x-httpd-fcgi .fcg
    
    # This is how you'd place the Unix-domain socket files in the logs
    # directory (you'd probably want to create a subdirectory for them.)
    # Don't do this until you've verified that the server works with
    # the socket files stored locally, in /tmp.
    # FastCgiIpcDir $APACHE/logs
    
    # Start the echo.fcg application (echo.fcg is a sym-link to echo,
    # created by $FASTCGI/examples/Makefile.)
    AppClass $FASTCGI/examples/echo.fcg -initial-env STATE=TEXAS
    
    # End of httpd.conf
    

    検索文字
    このJAPACHE!ニュースグループへ
    ( japache.mod.fastcgi ) | JAPACHE!ニュースについて | JAPACHE!ホームページへ

    このページの情報に関わる、ご質問、お問い合わせは、 japache@infoscience.co.jpまで。


    The English original manual is here.

    Index Home