Как установить lighttpd сервер на Ubuntu Server 9.10
05.04.2010, рубрики: how-to | Теги: servers | 19 комментариев »
Если вы задаетесь вопросом как установить Web-сервер lighttpd в Ubuntu то вам сюда. Это полное руководство по установке от «А» до «Я», начиная от подготовки платформы, проектирования будущей файловой системы сайтов которые будут обслуживаться сервером. В статье подробно изложены вопросы настройки сервера и вопросы безопасности будущих сайтов, таких как правильно сформированная структура хранения файлов для основного домена и саб-домена. Прочитав статью до конца, вы сможете без труда запустить сервер и у вас вряд ли возникнут вопросы. Ниже изложенная статья является самым подробным руководством по установке lighttpd в Рунете. Как это делается читаем ниже
ФундаментЪ
Первое что нам необходимо это подготовить платформу будущего сервера. Удобнее всего запускать его на виртуалке. Так и поступим. Качаем последнюю версию VirtualBox. Ставим ее. Качаем Ubuntu Server 9.04. Устанавливаем внутри виртуалки наш образ. Получаем готовую сервер платформу. Лично мне нравиться использовать Ubuntu Server в связке с легким xfce. Далее все действия производятся уже в готовой платформе, т.е. внутри виртуальной машины. В xfce нет большой необходимости, но если вам так удобнее (как и мне) ставим его командой:
- sudo aptitude install xubuntu-desktop
Обратите внимание, sudo по дефолту может не работать, добыть его можно так:
- su -
- nano /etc/sudoers
в файле нужно вписать своего пользователя, а перед рутом поставить %:
- # User privilege specification
- %root ALL=(ALL) ALL
- user ALL=(ALL) ALL
Итак в готовом виде мы уже имеем:
- Виртуальную машину под управлением VirtualBox
- Установленные внутри виртуалки Ubuntu Server 9.04
- Графический рабочий стол xfce
Перед началом установки сервера не забудьте обновить систему:
- sudo apt-get update
- sudo apt-get safe-upgrade
Начнем с создания пользователя и группы под которыми будет работать веб-сервер.
Создаем пользователя www, для в вашем текущем сеансе станьте администратором:
- su root
Теперь создайте нового пользователя:
- adduser www
Присвойте ему пароль и всю необходимую информацию которую у вас запросит утилита.
Группа создалась автоматически, т.е. вам осталось только завести пользователя www в одноименную группу:
- usermod -a -G www www
Что-бы не скомпрометировать систему в будущем, проверьте файлы /etc/passwd/ и /etc/group на наличие одинаковых PID с вашим новым пользователем и группой, если таковые имеются, смените PID на любой другой.
- sudo cat /etc/passwd | grep 1001
- www:x:1001:1002::/home/www:/bin/sh
Всё готово. Можно залогиниться в систему под вашим новым пользователем.
Ваш текущий домашний каталог должен быть /home/www/
Давайте создадим файловую структуру нашего будущего сайта, схематично это должно выглядеть так:

Каждая из папок будет принадлежать пользователю www.
- mkdir ~/public_html/
- mkdir ~/public_html/site1/
- mkdir ~/public_html/site1/www/
- mkdir ~/public_html/site1/subdomain1/
- mkdir ~/public_html/site1/logs/
- mkdir ~/public_html/site1/stats/
- mkdir ~/public_html/site1/archives/
- mkdir ~/public_html/site1/uploads/
Для всех папок:
- sudo chmod -R 766 ~/public_html/
Установка сервера lighttpd
Далее все как по учебнику.
Устанавливаем сервер:
- sudo apt-get install lighttpd
Поздравляю, сервер установлен, вы можете убедиться в этом перейдя в браузере по адресу: http://localhost/
Вы должны будете увидеть страницу приветствия сервера.

Итак директория для сайта по дефолту: /var/www/
Конфиг сервера: /etc/lighttpd/lighttpd.conf
Установка PHP5 с поддержкой CGI
Теперь нам необходимо поставить PHP5 с поддержкой CGI, в Ubuntu для этого есть готовые пакеты:
- sudo apt-get install php5-cgi
Что-бы PHP5 работало с Lighttpd через CGI-интерфейс необходимо отредактировать два файла:
1) Файл настройки PHP5 /etc/php5/cgi/php.ini
2) Файл конфигурации сервера /etc/lighttpd/lighttpd.conf
В файл /etc/php5/cgi/php.ini необходимо вставить директиву cgi.fix_pathinfo = 1
- sudo nano /etc/php5/cgi/php.ini
- ....
- cgi.fix_pathinfo = 1
Сохраните и закройте файл.
В файл /etc/lighttpd/lighttpd.conf необходимо встроить целый ряд директив, первая mod_fastcgi которая подключит модуль CGI после перезапуска сервера.
- sudo nano /etc/lighttpd/lighttpd.conf
- ....
- server.modules = (
- "mod_access",
- "mod_alias",
- "mod_accesslog",
- "mod_compress",
- "mod_fastcgi", <- подключаем модуль
- ...
В конце файла вставляем:
- fastcgi.server = ( ".php" => ((
- "bin-path" => "/path/to/php-cgi",
- "socket" => "/tmp/php.socket"
- )))
Установка MySQL
Приступаем к инсталляции MySQL, всё стандартно:
- sudo aptitude install mysql-server mysql-client libmysqlclient15-dev
В целях безопасности меняем root-пароль:
- sudo mysqladmin -u root password -p
а так же:
- sudo /usr/bin/mysql_secure_installation
Проверяем работу MySQL:
- sudo netstat -tap | grep mysql
Если всё хорошо, видим следующие (порт будет другой)
- tcp 0 0 localhost:mysql *:* LISTEN 1556/mysqld
Теперь нам необходимо до установить пакеты поддержки MySQL в PHP5:
- sudo apt-get install php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl php5-common
В принципе всё готов. Теперь по идеи, как написано на сайте разработчиков, необходимо включить FastCGI конфигурацию, файл которой расположен по адресу: /etc/lighttpd/conf-available/10-fastcgi.conf
Это выполняется командой:
- sudo lighttpd-enable-mod fastcgi
После чего создать символьную ссылку файла /etc/lighttpd/conf-enabled/10-fastcgi.conf:
- ls -l /etc/lighttpd/conf-enabled
и в конце-концов перезагрузить сервер:
- sudo /etc/init.d/lighttpd force-reload
Теперь, если вы расположите файл с именем index.php с содержанием вида:
- <?php
- phpinfo();
- ?>
по адресу /var/www/ и перейдете сюда http://localhost/ вы должны увидеть информационную страницу PHP.

Ошибка
Так оно и было. Но вот буквально вчера, столкнулся со следующей проблемой, сервер не стартовал, ругаясь на то, что у него в конфиге есть строчка fastcgi.server, а самого PHP5 с CGI в процессах и в помине нет. Так оно и оказалось. Проверял на ряде систем: Ubuntu Server 9.04, Ubuntu Desktop 9.10, Ubuntu Server 8.04, везде было всё одно и тоже, хотя во всех случаях установка сервака и PHP5 проходила без шума и пыли. PHP5 по идее должен стартовать с подачи сервера, а он этого не делал, даже после включения sudo lighttpd-enable-mod fastcgi поддержки CGI.
Решение пришло случайно, что-бы запустить сервер и сопутствующий ему PHP5-CGI я выполнил следующие команды.
Включаем FastCGI конфигурацию:
- sudo lighttpd-enable-mod fastcgi
Создаем символьную ссылку файла /etc/lighttpd/conf-enabled/10-fastcgi.conf:
- ls -l /etc/lighttpd/conf-enabled
Перезагружаем сервер:
- sudo /etc/init.d/lighttpd force-reload
Видим ошибку вида:
Duplicate config variable in conditional 0 global: fastcgi.server
2010-04-05 20:59:09: (configfile.c.864) source: /etc/lighttpd/lighttpd.conf line: 173 pos: 1 parser failed somehow near here: (EOL)
Выключаем FastCGI конфигурацию:
- sudo lighttpd-disable-mod fastcgi
И успешно стартуем сервер:
- sudo /etc/init.d/lighttpd force-reload
Думаю ошибка таится именно в данной сборке сервера и скорее всего если вы будите ставить последнюю версию из исходников вы с такой проблемой не сталкнетесь.
Настройка сервера
И так сервер запущен. Осталось немного поправить конфиг, а именно подравнять директории, поменять пользователя www-data с которого стартует сервер на текущего, т.е. www, настроить виртуальные хосты, если в таких есть необходимость.
Файл прокомментирован!
- server.modules = (
- "mod_access",
- "mod_alias",
- "mod_accesslog",
- "mod_compress",
- "mod_fastcgi", <-- подключенный модуль FastCGI
- # "mod_rewrite",
- # "mod_redirect",
- # "mod_evhost",
- # "mod_usertrack",
- # "mod_rrdtool",
- # "mod_webdav",
- # "mod_expire",
- # "mod_flv_streaming",
- # "mod_evasive"
- )
- ## a static document-root, for virtual-hosting take look at the
- ## server.virtual-* options
- server.document-root = "/home/www/public_html/site1/www/" <-- сменили директорию сайта
- ## where to upload files to, purged daily.
- server.upload-dirs = ( "/home/www/public_html/site1/uploads" ) <-- сменили папку куда будут сгружать файлы
- ## where to send error-messages to
- server.errorlog = "/home/www/public_html/site1/logs/error.log" <-- сменили папку для логов
- ## files to check for if .../ is requested
- index-file.names = ( "index.php", "index.html",
- "index.htm" ) <-- убрали лишнее
- ## Use the "Content-Type" extended attribute to obtain mime type if possible
- # mimetype.use-xattr = "enable"
- #### accesslog module
- accesslog.filename = "/home/www/public_html/site1/logs/access.log" <-- сменили папку для логов
- ## deny access the file-extensions
- #
- # ~ is for backupfiles from vi, emacs, joe, ...
- # .inc is often used for code includes which should in general not be part
- # of the document-root
- url.access-deny = ( "~", ".inc" )
- # which extensions should not be handle via static-file transfer
- #
- # .php, .pl, .fcgi are most often handled by mod_fastcgi or mod_cgi
- static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
- ## Use ipv6 only if available.
- #include_shell "/usr/share/lighttpd/use-ipv6.pl" <-- закомментили использование протокола ipv6
- ## bind to port (default: 80)
- # server.port = 81
- ## bind to localhost only (default: all interfaces)
- ## server.bind = "localhost" <-- тут можете указать свой IP
- ## error-handler for status 404
- #server.error-handler-404 = "/error-handler.html"
- #server.error-handler-404 = "/error-handler.php"
- ## to help the rc.scripts
- server.pid-file = "/var/run/lighttpd.pid" <-- PID файл как и в случае с nginx тоже можно сложить в хомяк
- ## Format: <errorfile-prefix><status>.html
- ## -> ..../status-404.html for 'File not found'
- #server.errorfile-prefix = "/var/www/"
- ## virtual directory listings
- dir-listing.encoding = "utf-8"
- server.dir-listing = "enable"
- ## send unhandled HTTP-header headers to error-log
- #debug.dump-unknown-headers = "enable"
- ### only root can use these options
- #
- # chroot() to directory (default: no chroot() )
- #server.chroot = "/"
- ## change uid to <uid> (default: don't care)
- server.username = "www" <-- сменили пользователя
- ## change uid to <uid> (default: don't care)
- server.groupname = "www" <-- сменили группу
- #### compress module
- compress.cache-dir = "/var/cache/lighttpd/compress/"
- compress.filetype = ("text/plain", "text/html", "application/x-javascript", "text/css")
- #### url handling modules (rewrite, redirect, access)
- # url.rewrite = ( "^/$" => "/server-status" )
- # url.redirect = ( "^/wishlist/(.+)" => "http://www.123.org/$1" )
- #
- # define a pattern for the host url finding
- # %% => % sign
- # %0 => domain name + tld
- # %1 => tld
- # %2 => domain name without tld
- # %3 => subdomain 1 name
- # %4 => subdomain 2 name
- #
- # evhost.path-pattern = "/home/storage/dev/www/%3/htdocs/"
- #### expire module
- # expire.url = ( "/buggy/" => "access 2 hours", "/asdhas/" => "access plus 1 seconds 2 minutes")
- #### rrdtool
- # rrdtool.binary = "/usr/bin/rrdtool"
- # rrdtool.db-name = "/var/www/lighttpd.rrd"
- #### variable usage:
- ## variable name without "." is auto prefixed by "var." and becomes "var.bar"
- #bar = 1
- #var.mystring = "foo"
- ## integer add
- #bar += 1
- ## string concat, with integer cast as string, result: "www.foo1.com"
- #server.name = "www." + mystring + var.bar + ".com"
- ## array merge
- #index-file.names = (foo + ".php") + index-file.names
- #index-file.names += (foo + ".php")
- #### external configuration files
- ## mimetype mapping
- include_shell "/usr/share/lighttpd/create-mime.assign.pl"
- ## load enabled configuration files,
- ## read /etc/lighttpd/conf-available/README first
- include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
- #### handle Debian Policy Manual, Section 11.5. urls
- ## by default allow them only from localhost
- ## (This must come last due to #445459)
- ## Note: =~ "127.0.0.1" works with ipv6 enabled, whereas == "127.0.0.1" doesn't
- $HTTP["remoteip"] =~ "127.0.0.1" {
- alias.url += (
- "/doc/" => "/usr/share/doc/",
- "/images/" => "/usr/share/images/"
- )
- $HTTP["url"] =~ "^/doc/|^/images/" {
- dir-listing.activate = "enable"
- }
- }
- fastcgi.server = ( ".php" => (( <-- необходимый блок для работы с PHP5-CGI
- "bin-path" => "/usr/bin/php5-cgi",
- "socket" => "/tmp/php.socket"
- )))
Настройка виртуальных хостов
Тут существует несколько способов.
Способ 1
Имеем:
IP: 87.69.172.191
Названия хостов: example.org и subdomain.example.com
Document-root: ~/public_html/site1/
Document-root для example.org: ~/public_html/site1/www/
Document-root для subdomain.example.com: ~/public_html/site1/subdomain1/
Logs: ~/public_html/site1/logs/
Открываем файл /etc/lighttpd/lighttpd.conf:
- sudo nano /etc/lighttpd/lighttpd.conf
Document Root:
- server.document-root = "/home/www/public_html/site1/"
Указываем IP и порт:
- server.port = 80
- server.bind = "87.69.172.191"
В конце файла добавляем
- include "example.org.conf"
- include "subdomain.example.org.conf"
Сохраните и закройте файл.
Соответственно нужно создать конфиги, создаём конфиг для example.org:
- sudo nano /etc/lighttpd/example.org.conf
И пишем туда следующее:
- $HTTP["host"] =~ "example\.org" {
- server.document-root = "/home/www/public_html/site1/www/"
- accesslog.filename = "/home/www/public_html/site1/logs/access.log"
- server.errorlog = "/home/www/public_html/site1/logs/error.log"
- }
Сохраняем и закрываем.
Создаём конфиг для для subdomain.example.org:
- sudo nano /etc/lighttpd/subdomain.example.org.conf
И пишем туда:
- $HTTP["host"] =~ "subdomain.example\.org" {
- server.document-root = "/home/www/public_html/site1/subdomain1/"
- accesslog.filename = "/home/www/public_html/site1/logs/access_subdomain.log"
- server.errorlog = "/home/www/public_html/site1/logs/error_subdomain.log"
- }
Сохраните и закройте.
Выполните перезагрузку сервера:
- sudo /etc/init.d/lighttpd restart
Способ 2
Всё тоже самое, только вместо того, чтобы подключать конфиги в файле /etc/lighttpd/lighttpd.conf можно вписать само содержимое конфигов внутрь конфигурационного сервера. Оба способа правильные. Например так:
- server.document-root = "/home/www/public_html/site1/"
- server.port = 80
- server.username = "www"
- server.groupname = "www"
- mimetype.assign = (
- ".html" => "text/html",
- ".txt" => "text/plain",
- ".jpg" => "image/jpeg",
- ".png" => "image/png"
- )
- static-file.exclude-extensions = ( ".fcgi", ".php", ".rb", "~", ".inc" )
- index-file.names = ( "index.html, index.php" )
- $HTTP["host"] == "www.example.org" {
- server.document-root = "/home/www/public_html/site1/www/"
- $HTTP["url"] =~ "^/download/" {
- dir-listing.activate = "enable"
- }
- }


отличная статья, несмотря на то что юзаю mandrivu почитал с удовльствием.
Спасибо)) Это всё будет и в Mandriva работать, собрать сервер из исходников не представляет труда, я не написал как это делать, только что бы «бумагу сэкономить» по тому как статьи такой длины обычно не читаемые)))
Да статейка очень нужная,знаете я вот например сисадмин там на 1 сервере, и мне всегда по барабану какой длины статья если мне что-то нужно я и статью в 4 томах прочту главное чтоб было описано то что меня интересует ))) так что кому надо те прочтут… Кстати огромное спасибо за статью, было интересно почитать, так как я пользуюсь apache,nginx ну я слышал и про lighttpd но как то не довелось пока что поюзать его…
я писал и про апач и про нжникс, кстати там статья еще длинннннееее ))) Рад что вам понравилось.
Что-то с конфигом сервера намудрено.
fastcgi.server = ( «.php» => ((
«bin-path» => «/path/to/php-cgi»,
«socket» => «/tmp/php.socket»
)))
добавлять не надо было, потому что это содержится в файле 10-fastcgi.conf.
да… А почему даже после прописи алиасинга в крнфигурационный файл лайти
alias.url = ( «/phpmyadmin» => «/usr/share/phpmyadmin» )
вместо phpmyadmin видно только чистую страницу???
phpmyadmin не ставил и на эту тему не разбирался, попробуйте погуглить, найдете решение, оставьте его тут, будет полезно всем.
Nasa эээ ставил с репов ? и наверняка галочку поставил при установке выбор веб серва ? блин скачай с офа скрипт админа залей его на серв закинь конфиг файл ну или создай его (там через устновку стандартную через браузер) вот и тогда пропиши должно помочь… а вообще если ты ставиш с репов и ставил галочку пр выборе серва то нечего прописывать ненадо оно и так должно работать с любого домена припаркованого к твоему серву….
Я шяс вот решил пересмотреть статью ну так чтоб освежить в памяти и тут наткнулся на ls -l сидел минут 5 втыкал с 1 мыслью либо я шяс нечего не соображаю в силу усталости либо симлинк делается так ln -s а ls это же для вывода содержимого каталога, решил себя перепроверить и пошёл к вике а она мне ответила :
» ls -l — выдавать (в одноколоночном формате) тип файла, права доступа к файлу, количество ссылок на файл, имя владельца, имя группы, размер файла (в байтах), временной штамп и имя файла. «
ls -l — и без вики понятно, что это опечатка)))
ну посреди ночи на усталый до чертиков мозг мне могло и причудится просто )))) Кста про работу с htaccess нече там не знаете ? а то прост интересно про их совместимость в гугле не нашол толковой инфы (возможно плохо искал) не ну фронтэд – бекенд с тем же апачем то ясно что будет… а если чисто lighttpd то как ? слыхал что как то по другому в конфиге надо писать но как подробности не нашол ((((
Кста а зачем ставить после su тире ?
su -
не опечатка ли ?
ну это один из способоB получить права рута. можно так:
# su
# su root
# su -
много есть разных способов!
Спасибо, да затупил ))) ну там в принципе различие между su и su- только в директории где оказывается юсер после ввода этой команды )))
Дык а че? Не все знают что значит:
# init 6
# init 0
Интернет для того и нужен, учимся друг у друга!
ну про # init 6 я знал ну тут перезагрузка, а про # init 0 не слыхал…
Зато теперь знаешь)))
эээ вот сижу и думаю а зачем вот эти 2 диретивы ?
server.document-root = «/home/www/public_html/site1/www/» <– сменили директорию сайта
## where to upload files to, purged daily.
server.upload-dirs = ( "/home/www/public_html/site1/uploads" ) <– сменили папку куда будут сгружать файлы
если мы используем вирт хосты, хотя в принципе нужно если сайт отключен там просто страницу заглушки кинуть да и все чтоб если что то заглушку показывало….
I received my first personal loans when I was 25 and this supported me very much. But, I need the financial loan once more time.