|
mod_fastcgi.cファイルの中に含まれます。これはPerl, C, C++, Java, Pythonを含む、多様な言語でウェブサーバアプリケーションを書くためのCGIに代わる高性能を供給します。
どんなMIMEタイプのファイルからの要求でも、application/x-httpd-fcgiはmod_fastcgiによって処理されるでしょう。要求が実行されるためには、サーバのコンフィグレーションは、AppClass命令を使ってアプリケーション(実行ファイル)をスタートしなければなりません。
このモジュールは、Apache 1.2かそれ以上にオプションとして含まれます。
FastCGIアプリケーションは単純な通信プロトコルを使ってウェブサーバと通信します。一つの全二重接続は、環境変数とstdinデータをアプリケーションと通信し、stdout、stderrデータをウェブサーバと通信します。
FastCGIについてのより多くの情報は、無料の有用なFastCGIサーバモジュールとアプリケーションライブラリをふくんでいます。
クライアントがファイルの
デフォルトでは、
この問題を避けるために、サーバコンフィグレーションの
以下に記した注意は
命令:
FastCGI Developer's Kit 1.5を構築して下さい。これはFastCGIアプリケーションとして実行する
このページの情報に関わる、ご質問、お問い合わせは、
japache@infoscience.co.jpまで。
命令
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_fastcgiAppClass命令は実行ファイルexec-pathを使って、一つかそれ以上のFastCGIアプリケーション処理を始めます。mod_fastcgiはwill restart these processes should they die.exec-pathを要求すると、要求はmod_fastcgiモジュールによって最初にハンドルされます。mod_fastcgiはレスポンスを生じるアプリケーションクラスの処理に対する要求を通信する。mod_fastcgiはクライアントに対してこのレスポンスを伝達します。AppClass命令に対するオプションパラメータは以下の通りです:
restart-delay seconds の内部で死ねば、先の再スタートからrestart-delay secondsがパスするまで再スタートはしないでしょう。この遅れはシステムを多く取り込みすぎてアプリケーションが壊れることを防いでいます。デフォルトの値は5秒です。setpriorityシステムが呼ぶことにより明確にされる、FastCGIアプリケーション処理の優先です。デフォルトの値はゼロ、すなわちHTTPサーバの優先権と同じです。負の値は認められません。name=valueの形を取っており、空白は認められません。このオプションを数回使うことによって、初期環境に対するいくつかのネームヴァリュー対を追加することができます。デフォルトの初期環境は、空です(ネームヴァリュー対がありません)。AppClass命令に起こり得るエラーには、syntax errors、レンジ外の引数、ファイルexec-pathが存在しない、実行できない、ということを含みます。FastCgiIpcDir
Syntax: FastCgiIpcDir dir-path
Context: srm.conf
Module: mod_fastcgiFastCgiIpcDir命令は、管理するアプリケーションと通信して、mod_fastcgiがUnix-domainのソケットを作っている場所をコントロールします。mod_fastcgiは/tmpにソケットを作ります。ソケット名はnが連続数であり、pidがApacheの親処理の処理IDである、OM_WS_n.pidと表記します。もしシステムが/tmpからファイルを消去する周期的な処理を実行して、これらのファイルを消去すると、ウェブサーバはFastCGIと通信することが不可能になります。AppClass命令よりも前にFastCgiIpcDir命令を置きます。ウェブサーバで使うアカウントによって読み込み、書き込み、検索が可能で、しかしさもなくば誰も接続できないディレクトリを指定して下さい。/tmpの外で動いているソケットでのplatform-specificの問題についてです;読んで下さい。
Important notes
/tmpがローカルファイルシステムの一部なら、どこかにそれらを置くためにFastCgiIpcDir命令を使うよりも、むしろ/tmpに聞いているソケットを残すことによって、この問題を避けることが出来るでしょう。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;
ScriptAlias命令はAddType命令よりも優先します;ScriptAlias命令のターゲットであるディレクトリに置かれたファイル は、application/x-httpd-cgiを持っており、mod_cgiに よってハンドルされます。それ故、/cgi-bin/ディレクトリにFastCGI アプリケーションを置かないで下さい。それは正確には作動しません!mod_fastcgiは、DocumentRootの最後にスラッシュを置 くと混乱します。その症状は、AppClassの使用を定義したアプリケーションを要求ハンドラーが見つけられないことです。mod_fastcgiはオプションモジュールmod_envによって定義された環境変数については判りません。AppClassに対する-initial-envオプションを使って下さい。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を結合することが出来ます。
$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として出力したファイルを保存します。httpdを実行可 能にします。echoを実行可能にし、このアプリケーションのecho.fcgリンクを作ります。このリンクは、が特有のMIME typeにそれを与えるのは、mod_fastcgiがそれをハンドルするからです。$APACHEとstart httpdにcdする:
% src/httpd -f $APACHE/conf/httpd.conf
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!ホームページへ
The English original manual is here.