Как настроить fastcgi для работы с lighttpd в Ubuntu

Вопрос или проблема

Я могу запустить lighttpd на ubuntu 9.10.

Но когда я попытался настроить fastcgi с lighttpd, добавив это в файл ligttpd.conf:

#### fastcgi модуль
fastcgi.server = ( "/fastcgi_scripts/" =>
      (( "host" => "127.0.0.1",
         "port" => "9098",
         "check-local" => "disable",
     "bin-path" => "/usr/local/bin/cgi-fcgi",
         "docroot" => "https://serverfault.com/" # удаленный сервер может использовать
                          # свой собственный docroot
      ))
    )

Вот что я получаю в error.log в ligttpd:
2010-03-07 21:00:11: (log.c.166) сервер запущен 
2010-03-07 21:00:11: (mod_fastcgi.c.1104) fastcgi-backend /usr/local/bin/cgi-fcgi не удалось запустить: 
2010-03-07 21:00:11: (mod_fastcgi.c.1108) дочерний процесс завершился с кодом 1 /usr/local/bin/cgi-fcgi 
2010-03-07 21:00:11: (mod_fastcgi.c.1111) Если вы пытаетесь запустить ваше приложение как FastCGI backend, убедитесь, что вы используете версию с поддержкой FastCGI.
Если это PHP на Gentoo, добавьте 'fastcgi' в флаги USE. 
2010-03-07 21:00:11: (mod_fastcgi.c.1399) [ОШИБКА]: создание fcgi не удалось. 
2010-03-07 21:00:11: (server.c.931) Конфигурация плагинов не удалась. Умирай. 

У меня есть cgi-fcgi в /usr/local/bin:

$ which cgi-fcgi 
/usr/local/bin/cgi-fcgi

‘/usr/local/bin/cgi-fcgi’ является исполняемым файлом после того, как я скачал и собрал fast-cgi.

Вот мой файл конфигурации lighttpd:

$ more lighttpd.conf
# конфигурационный файл для lighttpd
#
# используйте его в качестве основы для lighttpd 1.0.0 и выше
#
# $Id: lighttpd.conf,v 1.7 2004/11/03 22:26:05 weigon Exp $

############ Опции, за которыми действительно нужно следить ####################

## модули для загрузки
# по крайней мере mod_access и mod_accesslog должны быть загружены
# все остальные модули должны загружаться только в случае крайней необходимости
# - экономит время
# - экономит память
server.modules              = (
#                               "mod_rewrite",
#                               "mod_redirect",
#                               "mod_alias",
                                "mod_access",
#                               "mod_trigger_b4_dl",
#                               "mod_auth",
#                               "mod_status",
#                               "mod_setenv",
                                "mod_fastcgi",
#                               "mod_proxy",
#                               "mod_simple_vhost",
#                               "mod_evhost",
#                               "mod_userdir",
#                               "mod_cgi",
#                               "mod_compress",
#                               "mod_ssi",
#                               "mod_usertrack",
#                               "mod_expire",
#                               "mod_secdownload",
#                               "mod_rrdtool",
                                "mod_accesslog" )

## Статический корень документа. Для виртуального хостинга посмотрите на модуль
## mod_simple_vhost.
server.document-root        = "/srv/www/htdocs/"

## куда отправлять сообщения об ошибках
server.errorlog             = "/var/log/lighttpd/error.log"

# файлы для проверки, если запрашивается .../
index-file.names            = ( "index.php", "index.html",
                                "index.htm", "default.htm" )

## настройка обработчика событий (читайте раздел производительности в справке)
# server.event-handler = "freebsd-kqueue" # необходимо для OS X

# сопоставление mimetype
mimetype.assign             = (
  ".pdf"          =>      "application/pdf",
  ".sig"          =>      "application/pgp-signature",
  ".spl"          =>      "application/futuresplash",
  ".class"        =>      "application/octet-stream",
  ".ps"           =>      "application/postscript",
  ".torrent"      =>      "application/x-bittorrent",
  ".dvi"          =>      "application/x-dvi",
  ".gz"           =>      "application/x-gzip",
  ".pac"          =>      "application/x-ns-proxy-autoconfig",
  ".swf"          =>      "application/x-shockwave-flash",
  ".tar.gz"       =>      "application/x-tgz",
  ".tgz"          =>      "application/x-tgz",
  ".tar"          =>      "application/x-tar",
  ".zip"          =>      "application/zip",
  ".mp3"          =>      "audio/mpeg",
  ".m3u"          =>      "audio/x-mpegurl",
  ".wma"          =>      "audio/x-ms-wma",
  ".wax"          =>      "audio/x-ms-wax",
  ".ogg"          =>      "application/ogg",
  ".wav"          =>      "audio/x-wav",
  ".gif"          =>      "image/gif",
  ".jar"          =>      "application/x-java-archive",
  ".jpg"          =>      "image/jpeg",
  ".jpeg"         =>      "image/jpeg",
  ".png"          =>      "image/png",
  ".xbm"          =>      "image/x-xbitmap",
  ".xpm"          =>      "image/x-xpixmap",
  ".xwd"          =>      "image/x-xwindowdump",
  ".css"          =>      "text/css",
  ".html"         =>      "text/html",
  ".htm"          =>      "text/html",
  ".js"           =>      "text/javascript",
  ".asc"          =>      "text/plain",
  ".c"            =>      "text/plain",
  ".cpp"          =>      "text/plain",
  ".log"          =>      "text/plain",
  ".conf"         =>      "text/plain",
  ".text"         =>      "text/plain",
  ".txt"          =>      "text/plain",
  ".dtd"          =>      "text/xml",
  ".xml"          =>      "text/xml",
  ".mpeg"         =>      "video/mpeg",
  ".mpg"          =>      "video/mpeg",
  ".mov"          =>      "video/quicktime",
  ".qt"           =>      "video/quicktime",
  ".avi"          =>      "video/x-msvideo",
  ".asf"          =>      "video/x-ms-asf",
  ".asx"          =>      "video/x-ms-asf",
  ".wmv"          =>      "video/x-ms-wmv",
  ".bz2"          =>      "application/x-bzip",
  ".tbz"          =>      "application/x-bzip-compressed-tar",
  ".tar.bz2"      =>      "application/x-bzip-compressed-tar",
  # тип mime по умолчанию
  ""              =>      "application/octet-stream",
 )

# Используйте расширенный атрибут "Content-Type", чтобы получить тип mime, если это возможно
#mimetype.use-xattr        = "enable"


## отправить другой заголовок Server:
## будьте добры и оставьте его на lighttpd
# server.tag                 = "lighttpd"

#### модуль accesslog
accesslog.filename          = "/var/log/lighttpd/access.log"

## запретить доступ к расширениям файлов
#
# ~    предназначен для резервных файлов из vi, emacs, joe, ...
# .inc часто используется для включений кода, которые в общем не должны быть частью
#      корня документа
url.access-deny             = ( "~", ".inc" )

$HTTP["url"] =~ "\.pdf$" {
  server.range-requests = "disable"
}

##
# какие расширения не должны обрабатываться через передачу статических файлов
#
# .php, .pl, .fcgi чаще всего обрабатываются mod_fastcgi или mod_cgi
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )

######### Опции, которые лучше изменить, но не обязательно #######

## привязаться к порту (по умолчанию: 80)
server.port                = 9090

## привязаться к localhost (по умолчанию: все интерфейсы)
server.bind                = "127.0.0.1"

## обработчик ошибок для статуса 404
#server.error-handler-404   = "/error-handler.html"
#server.error-handler-404   = "/error-handler.php"

## чтобы помочь скриптам rc.scripts
#server.pid-file            = "/var/run/lighttpd.pid"


###### виртуальные хосты
##
##  Если вы хотите виртуальный хостинг на основе имени, добавьте следующие три настройки и загрузите
##  mod_simple_vhost
##
## корень документа =
##   корень виртуального сервера + виртуальный сервер по умолчанию + корень документа виртуального сервера
## или
##   корень виртуального сервера + http-host + корень документа виртуального сервера
##
#simple-vhost.server-root   = "/srv/www/vhosts/"
#simple-vhost.default-host  = "www.example.org"
#simple-vhost.document-root = "/htdocs/"


##
## Формат: <префикс-файла-ошибки><код-состояния>.html
## -> ..../status-404.html для 'Файл не найден'
#server.errorfile-prefix    = "/usr/share/lighttpd/errors/status-"
#server.errorfile-prefix    = "/srv/www/errors/status-"

## виртуальные списки каталогов
#dir-listing.activate       = "enable"
## выберите кодировку для списков каталогов
#dir-listing.encoding        = "utf-8"

## включить отладку
#debug.log-request-header   = "enable"
#debug.log-response-header  = "enable"
#debug.log-request-handling = "enable"
#debug.log-file-not-found   = "enable"

### только root может использовать эти опции
#
# chroot() в директорию (по умолчанию: нет chroot() )
#server.chroot              = "https://serverfault.com/"

## изменить uid на <uid> (по умолчанию: не важно)
#server.username            = "wwwrun"

## изменить uid на <uid> (по умолчанию: не важно)
#server.groupname           = "wwwrun"

#### модуль сжатия
#compress.cache-dir         = "/var/cache/lighttpd/compress/"
#compress.filetype          = ("text/plain", "text/html")

#### модуль прокси
## читайте proxy.txt для получения дополнительной информации
#proxy.server               = ( ".php" =>
#                               ( "localhost" =>
#                                 (
#                                   "host" => "192.168.0.101",
#                                   "port" => 80
#                                 )
#                               )
#                             )

#### модуль fastcgi
fastcgi.server = ( "/fastcgi_scripts/" =>
      (( "host" => "127.0.0.1",
         "port" => 1026,
         "check-local" => "disable",
     "bin-path" => "/usr/local/bin/cgi-fcgi",
     #"docroot" => "https://serverfault.com/" # удаленный сервер может использовать
                          # свой собственный docroot
      ))
    )
## читайте fastcgi.txt для получения дополнительной информации
## для PHP не забудьте установить cgi.fix_pathinfo = 1 в php.ini
#fastcgi.server             = ( ".php" =>
#                               ( "localhost" =>
#                                 (
#                                   "socket" => "/var/run/lighttpd/php-fastcgi.socket",
#                                   "bin-path" => "/usr/local/bin/php-cgi"
#                                 )
#                               )
#                            )

#### модуль CGI
#cgi.assign                 = ( ".pl"  => "/usr/bin/perl",
#                               ".cgi" => "/usr/bin/perl" )
#

#### SSL engine
#ssl.engine                 = "enable"
#ssl.pemfile                = "/etc/ssl/private/lighttpd.pem"

#### статус модуль
#status.status-url          = "/server-status"
#status.config-url          = "/server-config"

#### модуль аутентификации
## читайте authentication.txt для получения дополнительной информации
#auth.backend               = "plain"
#auth.backend.plain.userfile = "lighttpd.user"
#auth.backend.plain.groupfile = "lighttpd.group"

#auth.backend.ldap.hostname = "localhost"
#auth.backend.ldap.base-dn  = "dc=my-domain,dc=com"
#auth.backend.ldap.filter   = "(uid=$)"

#auth.require               = ( "/server-status" =>
#                               (
#                                 "method"  => "digest",
#                                 "realm"   => "download archiv",
#                                 "require" => "user=jan"
#                               ),
#                               "/server-config" =>
#                               (
#                                 "method"  => "digest",
#                                 "realm"   => "download archiv",
#                                 "require" => "valid-user"
#                               )
#                             )

#### обработка URL (перезапись, перенаправление, доступ)
#url.rewrite                = ( "^/$"             => "/server-status" )
#url.redirect               = ( "^/wishlist/(.+)" => "http://www.123.org/$1" )
#### поддержка перезаписи/перенаправления обратно ссылается на условие regex с использованием %n
#$HTTP["host"] =~ "^www\.(.*)" {
#  url.redirect            = ( "^/(.*)" => "http://%1/$1" )
#}

#
# определите шаблон для нахождения URL хоста
# %% => % знак
# %0 => имя домена + tld
# %1 => tld
# %2 => имя домена без tld
# %3 => имя поддомена 1
# %4 => имя поддомена 2
#
#evhost.path-pattern        = "/srv/www/vhosts/%3/htdocs/"

#### модуль expire
#expire.url                 = ( "/buggy/" => "access 2 hours", "/asdhas/" => "access plus 1 seconds 2 minutes")

#### ssi
#ssi.extension              = ( ".shtml" )

#### rrdtool
#rrdtool.binary             = "/usr/bin/rrdtool"
#rrdtool.db-name            = "/var/lib/lighttpd/lighttpd.rrd"

#### использование переменных:
## имя переменной без "." автоматически префиксируется как "var." и становится "var.bar"
#bar = 1
#var.mystring = "foo"

## целочисленное добавление
#bar += 1
## конкатенация строк, с приведением целого числа как строки, результат: "www.foo1.com"
#server.name = "www." + mystring + var.bar + ".com"
## объединение массивов
#index-file.names = (foo + ".php") + index-file.names
#index-file.names += (foo + ".php")

#### включение
#include /etc/lighttpd/lighttpd-inc.conf
## то же самое, если вы запускаете: "lighttpd -f /etc/lighttpd/lighttpd.conf"
#include "lighttpd-inc.conf"

#### include_shell
#include_shell "echo var.a=1"
## то же самое:
#var.a=1

Спасибо за вашу помощь.

Я получаю ту же ошибку, когда пытаюсь использовать c-приложение helloweb в качестве моего образца двоичного скрипта fast-cgi. Ошибка связана с тем, что когда lighty начинает выполнять скрипт, он не может найти связанную общую библиотеку libfcgi.so.0.

Как только я обновляю свой LD_LIBRARY_PATH и ldconfig, образец бинарного скрипта fcgi может нормально находить библиотеку.
export LD_LIBRARY_PATH=/usr/local/lib
ldconfig

error.log не говорит, что библиотека отсутствует, когда вы вызываете lighttpd в качестве сервиса (sudo service lighttpd start).

но если вы запускаете lighttpd из его исходников, где вы можете собрать lighty ( sudo lighttpd -D -f doc/config/mylighttpd.conf) вы получаете сообщение об ошибке.

/usr/lib/fcgi-bin/helloweb: ошибка при загрузке общих библиотек: libfcgi.so.0: невозможно открыть общий объектный файл: Нет такого файла или директории)

надеюсь, это поможет кому-то.

Я предполагаю, что вы запускаете сервер как root. Если нет, можете ли вы удостовериться, что пользователь, которого вы используете для запуска сервера, имеет доступ к /usr/local/bin/cgi-fcgi? Также убедитесь, что cgi-fcgi работает без ошибок, просто выполнив /usr/local/bin/cgi-fcgi

Ответ или решение

Как настроить FastCGI для работы с Lighttpd в Ubuntu

Настройка FastCGI для Lighttpd в Ubuntu может быть сложной задачей, особенно если вы сталкиваетесь с ошибками. В этой статье мы разберемся в том, как правильно конфигурировать FastCGI, чтобы избежать распространенных проблем, таких как ошибки при запуске, и приведем шаги для их устранения.

Шаг 1: Установка необходимых пакетов

Убедитесь, что у вас установлены необходимые пакеты, включающие Lighttpd и соответствующие библиотеки для работы с FastCGI. Используйте следующую команду для установки:

sudo apt-get update
sudo apt-get install lighttpd lighttpd-modules-fastcgi

Шаг 2: Настройка lighttpd.conf

Откройте файл конфигурации Lighttpd, который обычно находится по пути /etc/lighttpd/lighttpd.conf, и добавьте в него конфигурацию FastCGI. Убедитесь, что раздел с настройками FastCGI выглядит правильно.

Пример конфигурации:

server.modules = (
    "mod_access",
    "mod_fastcgi",
    "mod_accesslog"
)

server.document-root = "/var/www/html/"
server.port = 80

# Настройка FastCGI
fastcgi.server = ( "/fastcgi_scripts/" =>
    (( "socket" => "/tmp/php-fastcgi.socket",
       "bin-path" => "/usr/bin/php-cgi",
       "check-local" => "disable",
       "max-procs" => 1,
       "bin-environment" => (
           "PHP_FCGI_CHILDREN" => "4",
           "PHP_FCGI_MAX_REQUESTS" => "500"
       )
    ))
)

В этом примере мы настраиваем FastCGI для PHP. Замените "bin-path" на путь к вашему FastCGI-исполнительному файлу, если вы используете другой язык, такой как Python или Perl.

Шаг 3: Проверка доступности cgi-fcgi

Перед тем как запустить Lighttpd, важно убедиться, что исполняемый файл FastCGI доступен и работает корректно. Вы можете проверить это, запустив следующую команду:

/usr/local/bin/cgi-fcgi -bind -connect 127.0.0.1:9000

Если команда возвращает ошибки, убедитесь, что cgi-fcgi был собран с поддержкой FastCGI. Это можно проверить, используя команду which, чтобы подтвердить местоположение файла.

Шаг 4: Проверка зависимостей библиотек

Если вы сталкиваетесь с ошибками, связанными с отсутствующими библиотеками, такими как libfcgi.so.0, необходимо убедиться, что путь к библиотеке указан в переменной окружения LD_LIBRARY_PATH. Вам нужно выполнить следующие команды:

export LD_LIBRARY_PATH=/usr/local/lib
sudo ldconfig

Эти команды добавляют /usr/local/lib в путь поиска библиотек и обновляют кэш динамических библиотек.

Шаг 5: Перезапуск Lighttpd

После внесения всех изменений вернитесь к конфигурации Lighttpd и перезапустите его, используя:

sudo service lighttpd restart

Заключение

Следуя инструкциям, изложенным в этой статье, вы сможете успешно настроить FastCGI для работы с Lighttpd на Ubuntu. Если вы всё еще сталкиваетесь с проблемами, такими как ошибки при запуске или проблемы с доступностью исполняемых файлов, не забудьте проверить пути и разрешения файлов. Эти шаги и советы помогут вам с легкостью установить и настроить FastCGI в вашем веб-сервере.

Пожалуйста, не стесняйтесь задавать вопросы, если у вас возникли трудности или требуются дополнительные разъяснения!

Оцените материал
Добавить комментарий

Капча загружается...