Gentoo Linuxを実行していて、Lighttpd + PHP + FastCGIを機能させようとしています。 I discovered LighttpdにはFastCGIプロセスマネージャーがありません。したがって、spawn-fcgiを使用することになっています。 LighttpdとPHPが機能しています。私の問題は、Webアプリを使用するためにspawn-fcgiとlighttpdを設定する方法がわからないことです。
これは私がインストールしたものです:
CGI
USEフラグ付き)私が通信しようとしているアプリケーションは、fcgidocsの例であるtiny.c
です。
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
int count = 0;
printf("Content-type: text/html\r\n"
"\r\n"
"<title>CGI Hello!</title>"
"<h1>CGI Hello!</h1>"
"Request number %d running on Host <i>%s</i>\n",
++count, getenv("SERVER_NAME"));
}
私はそれをコンパイルしてコンソールから動作させています:
nick@blozup ~/zwave $ ./tiny.fcgi
Content-type: text/html <title>FastCGI Hello!</title>
<h1>FastCGI Hello!</h1>Request number 1 running on Host <i>(null)</i>
ここで我慢して、何をしているのかわからない...
最初に、コンパイルされたtiny.fcgi
をWebディレクトリ(具体的には、機能しなかったcgi-bin
、次にルートWebディレクトリ)に配置してみました。私が得た最も近いものは、403禁止エラーメッセージでした。私は許可が寛大であることを確認しました、運がありません。
さらに読んだ後、spawn-fcgiを使用する必要があることに気付きました。そこで、それをインストールしてアプリケーションをシンボリックリンクし、デフォルトの構成をコピーして、アプリケーション用に編集しました。
ln -s /etc/init.d/spawn-fcgi /etc/init.d/spawn-fcgi.fcgi
cp /etc/conf.d/spawn-fcgi /etc/conf.d/spawn-fcgi.fcgi
ファイル/etc/conf.d/spawn-fcgi.fcgi
:
# Copyright 1999-2009 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/www-servers/spawn-fcgi/files/spawn-fcgi.confd,v 1.6 2009/09/28 08:38:02 bangert Exp $
# DO NOT MODIFY THIS FILE DIRECTLY! CREATE A COPY AND MODIFY THAT INSTEAD!
# The FCGI process can be made available through a filesystem socket or
# through a inet socket. One and only one of the two types must be choosen.
# Default is the inet socket.
# The filename specified by
# FCGI_SOCKET will be suffixed with a number for each child process, for
# example, fcgi.socket-1.
# Leave empty to use an IP socket (default). See below. Enabling this,
# disables the IP socket.
#
FCGI_SOCKET=/var/run/fcgi.socket
# When using FCGI_PORT, connections will only be accepted from the following
# address. The default is 127.0.0.1. Use 0.0.0.0 to bind to all addresses.
#
FCGI_ADDRESS=127.0.0.1
# The port specified by FCGI_PORT is the port used
# by the first child process. If this is set to 1234 then subsequent child
# processes will use 1235, 1236, etc.
#
#FCGI_PORT=1234
# The path to your FastCGI application. These sometimes carry the .fcgi
# extension but not always. For PHP, you should usually point this to
# /usr/bin/php-cgi.
#
#FCGI_PROGRAM=/usr/bin/php-cgi
FCGI_PROGRAM=/home/nick/zwave/tiny.fcgi
# The number of child processes to spawn. The default is 1.
#
FCGI_CHILDREN=1
# If you want to run your application inside a chroot then specify the
# directory here. Leave this blank otherwise.
#
FCGI_CHROOT=
# If you want to run your application from a specific directiory specify
# it here. Leave this blank otherwise.
#
FCGI_CHDIR=
# The user and group to run your application as. If you do not specify these,
# the application will be run as root:root.
#
FCGI_USER=
FCGI_GROUP=
# Additional options you might want to pass to spawn-fcgi
#
#FCGI_EXTRA_OPTIONS=
# If your application requires additional environment variables, you may
# specify them here. See PHP example below.
#
ALLOWED_ENV="PATH"
それから私はプロセスを開始しました、そしてそれは今実行されています:
blozup zwave # /etc/init.d/spawn-fcgi.fcgi start
Starting.... [OK]
blozup zwave # ps aux | grep tiny root
5809 0.0 0.0 2236 504 ? Ss 17:47 0:00 /home/nick/zwave/tiny.fcgi
ソケットは次の場所に作成されています:/var/run/lighttpd/tiny.socket-1
これに接続するためにlighttpdを取得するにはどうすればよいですか? URLからアクセスするにはどうすればよいですか?
Lighttpdがそのソケットを使用する必要があることは知っていますが、mod_fastcgi.conf
ファイルを編集すると:
fastcgi.server += (".fcgi" =>
( "localhost" =>
(
"socket" => "/var/run/lighttpd/fcgi.socket-1",
"bin-path" => "/usr/bin/cgi-fcgi",
"max-procs" => 1
))
)
このエラーが発生します:
2012-06-13 18:50:18: (mod_fastcgi.c.1389) --- fastcgi spawning
port: 0
socket /var/run/lighttpd/fcgi.socket-1
current: 0 / 1
2012-06-13 18:50:18: (mod_fastcgi.c.1103) the fastcgi-backend /usr/bin/cgi-fcgi failed to start:
2012-06-13 18:50:18: (mod_fastcgi.c.1107) child exited with status 1 /usr/bin/cgi-fcgi
2012-06-13 18:50:18: (mod_fastcgi.c.1110) If you're trying to run your app as a FastCGI backend, make sure you're using the FastCGI-enabled version.
If this is PHP on Gentoo, add 'fastcgi' to the USE flags.
2012-06-13 18:50:18: (mod_fastcgi.c.1397) [ERROR]: spawning fcgi failed.
ここからどこへ行けばいいのかわからない。 PHP以外のものを生成するようにlighttpdWebサーバーをセットアップする方法についてはあまりわかりませんでした。これはすべて、Apacheを使用するとはるかに簡単になりますか?
まあ、それはbin-path
私がハングアップしていた設定。私のアプリケーションは現在次の場所にあります。
/var/www/localhost/cgi-bin/tiny.fcgi
ソケットは次の場所で作成されます。
/var/run/lighttpd/tiny.socket-1
(「-1」はspawn-fcgiによって作成され、lighttpdがr/wできるようにchmodされます)
mod_fcgi.conf
ファイル:
server.modules += ("mod_fastcgi")
fastcgi.debug = 1
fastcgi.server = ( ".php" =>
((
"socket" => "/var/run/lighttpd/lighttpd-fastcgi-php-" + PID + ".socket",
"bin-path" => "/usr/bin/php-cgi",
)),
"/cgi-bin/" =>
((
"socket" => "/var/run/lighttpd/tiny.socket-1",
# "bin-path" => "/home/nick/zwave/tiny.fcgi",
"check-local" => "disable",
"max-procs" => 1
))
)
そして今、それは機能しています!
したがって、すでにソケットを持っている独自のアプリを呼び出す場合は、bin-pathはありません。 spawn-fcgiは、Lighttpdではなく、これらのプロセスを開始します。