Как установить lighttpd сервер на Ubuntu Server 9.10

05.04.2010, рубрики: how-to | Теги: | 19 комментариев »

light_logo_170pxЕсли вы задаетесь вопросом как установить Web-сервер lighttpd в Ubuntu то вам сюда. Это полное руководство по установке от «А» до «Я», начиная от подготовки платформы, проектирования будущей файловой системы сайтов которые будут обслуживаться сервером. В статье подробно изложены вопросы настройки сервера и вопросы безопасности будущих сайтов, таких как правильно сформированная структура хранения файлов для основного домена и саб-домена. Прочитав статью до конца, вы сможете без труда запустить сервер и у вас вряд ли возникнут вопросы. Ниже изложенная статья является самым подробным руководством по установке lighttpd в Рунете. Как это делается читаем ниже

ФундаментЪ

Первое что нам необходимо это подготовить платформу будущего сервера. Удобнее всего запускать его на виртуалке. Так и поступим. Качаем последнюю версию VirtualBox. Ставим ее. Качаем Ubuntu Server 9.04. Устанавливаем внутри виртуалки наш образ. Получаем готовую сервер платформу. Лично мне нравиться использовать Ubuntu Server в связке с легким xfce. Далее все действия производятся уже в готовой платформе, т.е. внутри виртуальной машины. В xfce нет большой необходимости, но если вам так удобнее (как и мне) ставим его командой:

  1. sudo aptitude install xubuntu-desktop

Обратите внимание, sudo по дефолту может не работать, добыть его можно так:

  1. su -
  2. nano /etc/sudoers

в файле нужно вписать своего пользователя, а перед рутом поставить %:

  1. # User privilege specification
  2. %root   ALL=(ALL) ALL
  3. user ALL=(ALL) ALL

Итак в готовом виде мы уже имеем:

  • Виртуальную машину под управлением VirtualBox
  • Установленные внутри виртуалки Ubuntu Server 9.04
  • Графический рабочий стол xfce

Перед началом установки сервера не забудьте обновить систему:

  1. sudo apt-get update
  2. sudo apt-get safe-upgrade

Начнем с создания пользователя и группы под которыми будет работать веб-сервер.
Создаем пользователя www, для в вашем текущем сеансе станьте администратором:

  1. su root

Теперь создайте нового пользователя:

  1. adduser www

Присвойте ему пароль и всю необходимую информацию которую у вас запросит утилита.
Группа создалась автоматически, т.е. вам осталось только завести пользователя www в одноименную группу:

  1. usermod -a -G www www

Что-бы не скомпрометировать систему в будущем, проверьте файлы /etc/passwd/ и /etc/group на наличие одинаковых PID с вашим новым пользователем и группой, если таковые имеются, смените PID на любой другой.

  1. sudo cat /etc/passwd | grep 1001
  2. www:x:1001:1002::/home/www:/bin/sh

Всё готово. Можно залогиниться в систему под вашим новым пользователем.
Ваш текущий домашний каталог должен быть /home/www/

Давайте создадим файловую структуру нашего будущего сайта, схематично это должно выглядеть так:

1

Каждая из папок будет принадлежать пользователю www.

  1. mkdir ~/public_html/
  2. mkdir ~/public_html/site1/
  3. mkdir ~/public_html/site1/www/
  4. mkdir ~/public_html/site1/subdomain1/
  5. mkdir ~/public_html/site1/logs/
  6. mkdir ~/public_html/site1/stats/
  7. mkdir ~/public_html/site1/archives/
  8. mkdir ~/public_html/site1/uploads/

Для всех папок:

  1. sudo chmod -R 766 ~/public_html/

Установка сервера lighttpd

Далее все как по учебнику.
Устанавливаем сервер:

  1. sudo apt-get install lighttpd

Поздравляю, сервер установлен, вы можете убедиться в этом перейдя в браузере по адресу: http://localhost/
Вы должны будете увидеть страницу приветствия сервера.

1

Итак директория для сайта по дефолту: /var/www/
Конфиг сервера: /etc/lighttpd/lighttpd.conf

Установка PHP5 с поддержкой CGI

Теперь нам необходимо поставить PHP5 с поддержкой CGI, в Ubuntu для этого есть готовые пакеты:

  1. 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

  1. sudo nano /etc/php5/cgi/php.ini
  2. ....
  3. cgi.fix_pathinfo = 1

Сохраните и закройте файл.

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

  1. sudo nano /etc/lighttpd/lighttpd.conf
  2. ....
  3. server.modules              = (
  4.             "mod_access",
  5.             "mod_alias",
  6.             "mod_accesslog",
  7.             "mod_compress",
  8.             "mod_fastcgi", <- подключаем модуль
  9. ...

В конце файла вставляем:

  1. fastcgi.server = ( ".php" => ((
  2.                      "bin-path" => "/path/to/php-cgi",
  3.                      "socket" => "/tmp/php.socket"
  4.                  )))

Установка MySQL

Приступаем к инсталляции MySQL, всё стандартно:

  1. sudo aptitude install mysql-server mysql-client libmysqlclient15-dev

В целях безопасности меняем root-пароль:

  1. sudo mysqladmin -u root password -p

а так же:

  1. sudo /usr/bin/mysql_secure_installation

Проверяем работу MySQL:

  1. sudo netstat -tap | grep mysql

Если всё хорошо, видим следующие (порт будет другой)

  1. tcp        0      0 localhost:mysql         *:*                     LISTEN      1556/mysqld

Теперь нам необходимо до установить пакеты поддержки MySQL в PHP5:

  1. 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
Это выполняется командой:

  1. sudo lighttpd-enable-mod fastcgi

После чего создать символьную ссылку файла /etc/lighttpd/conf-enabled/10-fastcgi.conf:

  1. ls -l /etc/lighttpd/conf-enabled

и в конце-концов перезагрузить сервер:

  1. sudo /etc/init.d/lighttpd force-reload

Теперь, если вы расположите файл с именем index.php с содержанием вида:

  1. <?php
  2. phpinfo();
  3. ?>

по адресу /var/www/ и перейдете сюда http://localhost/ вы должны увидеть информационную страницу PHP.

2

Ошибка

Так оно и было. Но вот буквально вчера, столкнулся со следующей проблемой, сервер не стартовал, ругаясь на то, что у него в конфиге есть строчка 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 конфигурацию:

  1. sudo lighttpd-enable-mod fastcgi

Создаем символьную ссылку файла /etc/lighttpd/conf-enabled/10-fastcgi.conf:

  1. ls -l /etc/lighttpd/conf-enabled

Перезагружаем сервер:

  1. 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 конфигурацию:

  1. sudo lighttpd-disable-mod fastcgi

И успешно стартуем сервер:

  1. sudo /etc/init.d/lighttpd force-reload

Думаю ошибка таится именно в данной сборке сервера и скорее всего если вы будите ставить последнюю версию из исходников вы с такой проблемой не сталкнетесь.

Настройка сервера

И так сервер запущен. Осталось немного поправить конфиг, а именно подравнять директории, поменять пользователя www-data с которого стартует сервер на текущего, т.е. www, настроить виртуальные хосты, если в таких есть необходимость.
Файл прокомментирован!

  1. server.modules              = (
  2.             "mod_access",
  3.             "mod_alias",
  4.             "mod_accesslog",
  5.             "mod_compress",
  6.         "mod_fastcgi", <-- подключенный модуль FastCGI
  7. #           "mod_rewrite",
  8. #           "mod_redirect",
  9. #           "mod_evhost",
  10. #           "mod_usertrack",
  11. #           "mod_rrdtool",
  12. #           "mod_webdav",
  13. #           "mod_expire",
  14. #           "mod_flv_streaming",
  15. #           "mod_evasive"
  16. )
  17.  
  18. ## a static document-root, for virtual-hosting take look at the
  19. ## server.virtual-* options
  20. server.document-root       = "/home/www/public_html/site1/www/" <-- сменили директорию сайта
  21.  
  22. ## where to upload files to, purged daily.
  23. server.upload-dirs = ( "/home/www/public_html/site1/uploads" ) <-- сменили папку куда будут сгружать файлы
  24.  
  25. ## where to send error-messages to
  26. server.errorlog            = "/home/www/public_html/site1/logs/error.log" <-- сменили папку для логов
  27.  
  28. ## files to check for if .../ is requested
  29. index-file.names           = ( "index.php", "index.html",
  30.                                "index.htm" ) <-- убрали лишнее
  31.  
  32. ## Use the "Content-Type" extended attribute to obtain mime type if possible
  33. # mimetype.use-xattr = "enable"
  34.  
  35. #### accesslog module
  36. accesslog.filename         = "/home/www/public_html/site1/logs/access.log" <-- сменили папку для логов
  37.  
  38. ## deny access the file-extensions
  39. #
  40. # ~    is for backupfiles from vi, emacs, joe, ...
  41. # .inc is often used for code includes which should in general not be part
  42. #      of the document-root
  43. url.access-deny            = ( "~", ".inc" )
  44.  
  45. # which extensions should not be handle via static-file transfer
  46. #
  47. # .php, .pl, .fcgi are most often handled by mod_fastcgi or mod_cgi
  48. static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
  49.  
  50. ## Use ipv6 only if available.
  51. #include_shell "/usr/share/lighttpd/use-ipv6.pl" <-- закомментили использование протокола ipv6
  52.  
  53. ## bind to port (default: 80)
  54. # server.port               = 81
  55.  
  56. ## bind to localhost only (default: all interfaces)
  57. ## server.bind                = "localhost"  <-- тут можете указать свой IP
  58.  
  59. ## error-handler for status 404
  60. #server.error-handler-404  = "/error-handler.html"
  61. #server.error-handler-404  = "/error-handler.php"
  62.  
  63. ## to help the rc.scripts
  64. server.pid-file            = "/var/run/lighttpd.pid" <-- PID файл как и в случае с nginx тоже можно сложить в хомяк
  65.  
  66. ## Format: <errorfile-prefix><status>.html
  67. ## -> ..../status-404.html for 'File not found'
  68. #server.errorfile-prefix    = "/var/www/"
  69.  
  70. ## virtual directory listings
  71. dir-listing.encoding        = "utf-8"
  72. server.dir-listing          = "enable"
  73.  
  74. ## send unhandled HTTP-header headers to error-log
  75. #debug.dump-unknown-headers  = "enable"
  76.  
  77. ### only root can use these options
  78. #
  79. # chroot() to directory (default: no chroot() )
  80. #server.chroot            = "/"
  81.  
  82. ## change uid to <uid> (default: don't care)
  83. server.username            = "www" <-- сменили пользователя
  84.  
  85. ## change uid to <uid> (default: don't care)
  86. server.groupname           = "www" <-- сменили группу
  87.  
  88. #### compress module
  89. compress.cache-dir          = "/var/cache/lighttpd/compress/"
  90. compress.filetype           = ("text/plain", "text/html", "application/x-javascript", "text/css")
  91.  
  92. #### url handling modules (rewrite, redirect, access)
  93. # url.rewrite                 = ( "^/$"             => "/server-status" )
  94. # url.redirect                = ( "^/wishlist/(.+)" => "http://www.123.org/$1" )
  95.  
  96. #
  97. # define a pattern for the host url finding
  98. # %% => % sign
  99. # %0 => domain name + tld
  100. # %1 => tld
  101. # %2 => domain name without tld
  102. # %3 => subdomain 1 name
  103. # %4 => subdomain 2 name
  104. #
  105. # evhost.path-pattern = "/home/storage/dev/www/%3/htdocs/"
  106.  
  107. #### expire module
  108. # expire.url                  = ( "/buggy/" => "access 2 hours", "/asdhas/" => "access plus 1 seconds 2 minutes")
  109.  
  110. #### rrdtool
  111. # rrdtool.binary = "/usr/bin/rrdtool"
  112. # rrdtool.db-name = "/var/www/lighttpd.rrd"
  113.  
  114. #### variable usage:
  115. ## variable name without "." is auto prefixed by "var." and becomes "var.bar"
  116. #bar = 1
  117. #var.mystring = "foo"
  118.  
  119. ## integer add
  120. #bar += 1
  121. ## string concat, with integer cast as string, result: "www.foo1.com"
  122. #server.name = "www." + mystring + var.bar + ".com"
  123. ## array merge
  124. #index-file.names = (foo + ".php") + index-file.names
  125. #index-file.names += (foo + ".php")
  126.  
  127. #### external configuration files
  128. ## mimetype mapping
  129. include_shell "/usr/share/lighttpd/create-mime.assign.pl"
  130.  
  131. ## load enabled configuration files,
  132. ## read /etc/lighttpd/conf-available/README first
  133. include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
  134.  
  135. #### handle Debian Policy Manual, Section 11.5. urls
  136. ## by default allow them only from localhost
  137. ## (This must come last due to #445459)
  138. ## Note: =~ "127.0.0.1" works with ipv6 enabled, whereas == "127.0.0.1" doesn't
  139. $HTTP["remoteip"] =~ "127.0.0.1" {
  140.     alias.url += (
  141.         "/doc/" => "/usr/share/doc/",
  142.         "/images/" => "/usr/share/images/"
  143.     )
  144.     $HTTP["url"] =~ "^/doc/|^/images/" {
  145.         dir-listing.activate = "enable"
  146.     }
  147. }
  148.  
  149. fastcgi.server = ( ".php" => ((    <-- необходимый блок для работы с PHP5-CGI
  150. "bin-path" => "/usr/bin/php5-cgi",
  151. "socket" => "/tmp/php.socket"
  152. )))

Настройка виртуальных хостов

Тут существует несколько способов.
Способ 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:

  1. sudo nano /etc/lighttpd/lighttpd.conf

Document Root:

  1. server.document-root = "/home/www/public_html/site1/"

Указываем IP и порт:

  1. server.port = 80
  2. server.bind = "87.69.172.191"

В конце файла добавляем

  1. include "example.org.conf"
  2. include "subdomain.example.org.conf"

Сохраните и закройте файл.

Соответственно нужно создать конфиги, создаём конфиг для example.org:

  1. sudo nano /etc/lighttpd/example.org.conf

И пишем туда следующее:

  1. $HTTP["host"] =~ "example\.org" {
  2.             server.document-root = "/home/www/public_html/site1/www/"
  3.             accesslog.filename = "/home/www/public_html/site1/logs/access.log"
  4.             server.errorlog = "/home/www/public_html/site1/logs/error.log"
  5. }

Сохраняем и закрываем.

Создаём конфиг для для subdomain.example.org:

  1. sudo nano /etc/lighttpd/subdomain.example.org.conf

И пишем туда:

  1. $HTTP["host"] =~ "subdomain.example\.org" {
  2.             server.document-root = "/home/www/public_html/site1/subdomain1/"
  3.             accesslog.filename = "/home/www/public_html/site1/logs/access_subdomain.log"
  4.             server.errorlog = "/home/www/public_html/site1/logs/error_subdomain.log"
  5. }

Сохраните и закройте.

Выполните перезагрузку сервера:

  1. sudo /etc/init.d/lighttpd restart

Способ 2

Всё тоже самое, только вместо того, чтобы подключать конфиги в файле /etc/lighttpd/lighttpd.conf можно вписать само содержимое конфигов внутрь конфигурационного сервера. Оба способа правильные. Например так:

  1. server.document-root = "/home/www/public_html/site1/"
  2.  
  3. server.port = 80
  4.  
  5. server.username = "www"
  6. server.groupname = "www"
  7.  
  8. mimetype.assign = (
  9.   ".html" => "text/html",
  10.   ".txt" => "text/plain",
  11.   ".jpg" => "image/jpeg",
  12.   ".png" => "image/png"
  13. )
  14.  
  15. static-file.exclude-extensions = ( ".fcgi", ".php", ".rb", "~", ".inc" )
  16. index-file.names = ( "index.html, index.php" )
  17.  
  18. $HTTP["host"] == "www.example.org" {
  19.   server.document-root = "/home/www/public_html/site1/www/"
  20.   $HTTP["url"] =~ "^/download/" {
  21.     dir-listing.activate = "enable"
  22.   }
  23. }

19 комментариев на запись “Как установить lighttpd сервер на Ubuntu Server 9.10”

  1. 1 watcher сказала в 15:53, 18.04.2010:

    отличная статья, несмотря на то что юзаю mandrivu почитал с удовльствием.

  2. 2 admin сказала в 17:41, 18.04.2010:

    Спасибо)) Это всё будет и в Mandriva работать, собрать сервер из исходников не представляет труда, я не написал как это делать, только что бы «бумагу сэкономить» по тому как статьи такой длины обычно не читаемые)))

  3. 3 gosha сказала в 23:51, 22.04.2010:

    Да статейка очень нужная,знаете я вот например сисадмин там на 1 сервере, и мне всегда по барабану какой длины статья если мне что-то нужно я и статью в 4 томах прочту главное чтоб было описано то что меня интересует ))) так что кому надо те прочтут… Кстати огромное спасибо за статью, было интересно почитать, так как я пользуюсь apache,nginx ну я слышал и про lighttpd но как то не довелось пока что поюзать его…

  4. 4 admin сказала в 23:57, 22.04.2010:

    я писал и про апач и про нжникс, кстати там статья еще длинннннееее ))) Рад что вам понравилось.

  5. 5 AR сказала в 19:44, 23.04.2010:

    Что-то с конфигом сервера намудрено.
    fastcgi.server = ( «.php» => ((
    «bin-path» => «/path/to/php-cgi»,
    «socket» => «/tmp/php.socket»
    )))
    добавлять не надо было, потому что это содержится в файле 10-fastcgi.conf.

  6. 6 Nasa сказала в 18:53, 04.05.2010:

    да… А почему даже после прописи алиасинга в крнфигурационный файл лайти

    alias.url = ( «/phpmyadmin» => «/usr/share/phpmyadmin» )

    вместо phpmyadmin видно только чистую страницу???

  7. 7 admin сказала в 19:04, 04.05.2010:

    phpmyadmin не ставил и на эту тему не разбирался, попробуйте погуглить, найдете решение, оставьте его тут, будет полезно всем.

  8. 8 gosha сказала в 23:37, 07.05.2010:

    Nasa эээ ставил с репов ? и наверняка галочку поставил при установке выбор веб серва ? блин скачай с офа скрипт админа залей его на серв закинь конфиг файл ну или создай его (там через устновку стандартную через браузер) вот и тогда пропиши должно помочь… а вообще если ты ставиш с репов и ставил галочку пр выборе серва то нечего прописывать ненадо оно и так должно работать с любого домена припаркованого к твоему серву….

  9. 9 gosha сказала в 1:04, 24.05.2010:

    Я шяс вот решил пересмотреть статью ну так чтоб освежить в памяти и тут наткнулся на ls -l сидел минут 5 втыкал с 1 мыслью либо я шяс нечего не соображаю в силу усталости либо симлинк делается так ln -s а ls это же для вывода содержимого каталога, решил себя перепроверить и пошёл к вике а она мне ответила :
    » ls -l — выдавать (в одноколоночном формате) тип файла, права доступа к файлу, количество ссылок на файл, имя владельца, имя группы, размер файла (в байтах), временной штамп и имя файла. «

  10. 10 admin сказала в 8:46, 24.05.2010:

    ls -l — и без вики понятно, что это опечатка)))

  11. 11 gosha сказала в 11:07, 24.05.2010:

    ну посреди ночи на усталый до чертиков мозг мне могло и причудится просто )))) Кста про работу с htaccess нече там не знаете ? а то прост интересно про их совместимость в гугле не нашол толковой инфы (возможно плохо искал) не ну фронтэд – бекенд с тем же апачем то ясно что будет… а если чисто lighttpd то как ? слыхал что как то по другому в конфиге надо писать но как подробности не нашол ((((

  12. 12 gosha сказала в 0:33, 13.06.2010:

    Кста а зачем ставить после su тире ?

    su -

    не опечатка ли ?

  13. 13 admin сказала в 8:57, 13.06.2010:

    ну это один из способоB получить права рута. можно так:
    # su
    # su root
    # su -

    много есть разных способов!

  14. 14 gosha сказала в 10:17, 13.06.2010:

    Спасибо, да затупил ))) ну там в принципе различие между su и su- только в директории где оказывается юсер после ввода этой команды )))

  15. 15 admin сказала в 21:29, 13.06.2010:

    Дык а че? Не все знают что значит:
    # init 6
    # init 0

    Интернет для того и нужен, учимся друг у друга!

  16. 16 gosha сказала в 21:59, 13.06.2010:

    ну про # init 6 я знал ну тут перезагрузка, а про # init 0 не слыхал…

  17. 17 admin сказала в 19:19, 14.06.2010:

    Зато теперь знаешь)))

  18. 18 gosha сказала в 18:39, 28.09.2010:

    эээ вот сижу и думаю а зачем вот эти 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" ) <– сменили папку куда будут сгружать файлы

    если мы используем вирт хосты, хотя в принципе нужно если сайт отключен там просто страницу заглушки кинуть да и все чтоб если что то заглушку показывало….

  19. 19 KarinNicholson сказала в 19:26, 20.12.2010:

    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.


Оставить комментарий

  • Доступные теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code lang=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" extra="">

  • *