Настройка Lighttpd и FastCGI для моего собственного веб-приложения?

13294
Nick

Я использую Gentoo Linux и пытаюсь заставить работать Lighttpd + PHP + FastCGI. Я обнаружил, что Lighttpd не имеет диспетчера процессов FastCGI. Итак, вы должны использовать spawn-fcgi. У меня Lighttpd и PHP работают. Моя проблема в том, что я не знаю, как настроить spawn-fcgi и lighttpd для использования моего веб-приложения.

Вот что я установил:

  • Lighttpd
  • PHP (с CGIфлагом USE)
  • мицелий-FCGI

Приложение, с которым я пытаюсь установить связь, - это просто пример 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")); } 

У меня это скомпилировано и работает из консоли:

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в веб-каталог (в cgi-binчастности, который не работал, а затем просто в корневой веб-каталог). Самое близкое, что я получил, было 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. 

Я не знаю, куда идти отсюда. Я не мог найти много о том, как настроить веб-сервер lighttpd для запуска чего-либо, кроме PHP. Будет ли все это намного проще с Apache?

2
Вам нужно использовать протокол FCGI для lighttpd через сокет Unix. Я не вижу, где это происходит здесь. Keith 12 лет назад 0
Ну, есть сокет в `/ var / run / lighttpd / tiny.socket-1`, мое приложение FCGI это создало. Я просто не знаю, как заставить Lighttpd «открыть» эту розетку. Я понял, что это было в конфигурационном файле и как-то связано с `cgi-fcgi`. В mod_fcgi.conf я указал тот же сокет: `" socket "=>" /var/run/lighttpd/fcgi.socket-1 "`, но либо cgi-fcgi является неправильной программой для вызова, либо я вызываю ее неправильно. Nick 12 лет назад 0
Я удалил строку `bin-path` в` mod_fastcgi.conf`, сохранил сокет, и сервер запустился. Единственное подтверждение того, что он открыл этот сокет в журналах: «все обработчики для /tiny.fcgi? На tiny.fcgi отключены». Теперь я получаю 500/503 ошибки в Lighttpd. Nick 12 лет назад 0

1 ответ на вопрос

1
Nick

Ну, это была bin-pathобстановка, от которой я зависал. Моя заявка находится сейчас по адресу:

/var/www/localhost/cgi-bin/tiny.fcgi

Сокет создается в:

/var/run/lighttpd/tiny.socket-1 ('-1' создается spawn-fcgi, и это chmod'd, так что lighttpd может вернуться к нему)

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.

Похожие вопросы