Estoy ejecutando Gentoo Linux, y estoy tratando de que Lighttpd + PHP + FastCGI funcione. yo descubierto que Lighttpd no tiene un administrador de procesos FastCGI. Entonces, se supone que debes usar spawn-fcgi. Tengo Lighttpd y PHP trabajando. Mi problema es que no sé cómo configurar spawn-fcgi y lighttpd para usar mi aplicación web.
Esto es lo que he instalado:
- Lighttpd
- PHP (con
CGI
USE flag) - spawn-fcgi
La aplicación con la que estoy tratando de comunicarme es solo el ejemplo de fcgi docs, 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"));
}
Lo tengo compilado y funcionando desde la consola:
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>
Tenga paciencia conmigo aquí, no tengo idea de lo que estoy haciendo ...
Primero intenté simplemente colocando el compilado tiny.fcgi
en un directorio web ( cgi-bin
, específicamente, que no funcionó, entonces solo en el directorio web raíz). Lo más cercano que obtuve fue un mensaje de error 403 prohibido. Me aseguré de que los permisos fueran liberales, no hubo suerte.
Después de leer un poco más, me di cuenta de que necesitaba usar spawn-fcgi. Así que lo instalé y vinculé mi aplicación, copié la configuración predeterminada y edité para mi aplicación:
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
Expediente /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"
Entonces empecé el proceso, y se está ejecutando ahora:
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
y se ha creado un socket en: /var/run/lighttpd/tiny.socket-1
¿Ahora que?
¿Cómo consigo que lighttpd se conecte a esto? ¿Y cómo accedo a eso desde una URL?
Sé que lighttpd necesita usar ese socket, pero cuando edito el mod_fastcgi.conf
expediente:
fastcgi.server += (".fcgi" =>
( "localhost" =>
(
"socket" => "/var/run/lighttpd/fcgi.socket-1",
"bin-path" => "/usr/bin/cgi-fcgi",
"max-procs" => 1
))
)
Me sale este error:
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.
No sé a dónde ir desde aquí. No pude encontrar mucho sobre cómo configurar el servidor web lighttpd para generar nada más que PHP. ¿Todo esto sería mucho más fácil con Apache?
/var/run/lighttpd/tiny.socket-1
, mi aplicación FCGI ha creado eso. Simplemente no sé cómo conseguir que Lighttpd "abra" ese socket. Pensé que estaba en el archivo de configuración y tenía algo que ver con cgi-fcgi
. En mod_fcgi.conf especificé ese mismo socket: "socket" => "/var/run/lighttpd/fcgi.socket-1"
, pero o cgi-fcgi es el programa incorrecto al que llamar, o lo estoy llamando mal.
bin-path
en linea mod_fastcgi.conf
, manteniendo el zócalo, y se inicia el servidor. La única indicación que tengo de que ha abierto ese socket en los registros es: "todos los controladores para /tiny.fcgi? En tiny.fcgi están inactivos". Ahora estoy recibiendo 500/503 errores en lighttpd.