Вопрос или проблема
Я могу запустить 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 в вашем веб-сервере.
Пожалуйста, не стесняйтесь задавать вопросы, если у вас возникли трудности или требуются дополнительные разъяснения!