Russian English German Ukrainian

Компьютерная помощь

(066) 72-00-654     (098) 44-74-068

г. Днепр

ж/м Левобережный-3

Lighttpd: простой веб-сервер

debian ubuntu

Мы часто используем lighttpd в качестве встроенного веб-сервера для различных служб (например веб-панелей и т.п.), в то же время многим нужен простой и легкий веб-сервер для размещения своих внутрисетевых ресурсов. Сделаем такой сервер на базе lighttpd.

Задача: развернуть на веб-сервере внутренний ресурс по адресу http://site.local и сделать возможным использование для него любых современных движков (например Joomla). В качестве операционной системы сервера будем использовать Ubuntu со всеми последними обновлениями.

Установка, настройка

Прежде всего установим сам веб-сервер:

sudo apt-get install lighttpd

После установки он сразу готов к работе, в чем можно убедиться набрав в браузере IP-адрес нашего сервера. Вы должны увидеть стандартную страницу-заглушку сервера.

Это хорошо, но нам нужно чтобы пользователи могли обращаться к сайту набирая его имя. Для этого в /etc/lighttpd/lighttpd.conf добавим следующую секцию:

$HTTP["host"] == "site.local" {
    accesslog.filename  = "/var/log/lighttpd/site.local-access.log"
    server.document-root = "/var/www/site.local"
}

Которая описывает наш хост и задает для него корневую директорию, так как мы собираемся размещать один сайт, то мы указали для него директорию используемую веб-сервером по умолчанию, т.е. /var/www. Подобным образом мы можем разместить на сервере несколько сайтов, указав для каждого свою корневую директорию, например /var/www/site.local и /var/www/site1.local.

Перезапустим веб-сервер:

sudo service lighttpd restart

Осталось только сообщить компьютерам нашей сети, что сайт site.local обслуживается нашим веб-сервером по адресу 10.0.0.145, это можно сделать прописав соответствующие строки в файле hosts на каждой рабочей станции, но лучше сделать это централизованно. Так как у нас в сети развернут кеширующий DNS (Dnsmasq) будет глупо не воспользоваться его возможностями. Для этого на роутере в конфигурационном файле /etc/dnsmasq.conf добавим следующие строки:

address=/site.local/10.0.0.145

Перезапустим Dnsmasq:

sudo service dnsmasq  restart

Если теперь мы наберем в браузере site.local, то также увидим страницу-заглушку веб-сервера. Теперь на нашем сервере можно размещать свои веб-странички, но как это сделать? Обычно на хостингах для доступа к содержимому сайтов используют FTP, в нашем случае мы не видим смысла использовать дополнительный сервис, так как установленный OpenSSH сервер дает возможность передачи файлов по защищенному протоколу SFTP. Никаких дополнительных настроек для этого не потребуется, достаточно в любом поддерживающем SFTP клиенте (например FileZilla) указать имя хоста, логин и пароль (вашего пользователя на веб-сервере) и порт подключения 22 или sftp://site.local в имени хоста.

Создадим в блокноте проверочную HTML страницу и сохранив ее под именем index.html разместим в папке /var/www нашего сервера (не забудьте установить права 777 на /var/www):

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Site.local Тестовая страница</title>
</head>
<body>
<h2>Site Local </h2>
<h3> Тестовая страница.</h3>
<p> Если вы можете прочитать этот текст, значит ваш веб-сервер работает и настроен правильно.
</p>
</body>

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

Листинг директорий

Чтобы включить листинг для всех каталогов в /etc/lighttpd/lighttpd.conf укажите следующую опцию:

dir-listing.activate = "enable"

Листинг включается для всех каталогов, в корне которых нет файлов перечисленных в директиве index-file.names. Чтобы включить листинг для отдельного каталога укажите следующее:

$HTTP["url"] =~ "^/download($|/)" {
   dir-listing.activate = "enable"
}

Tip: Для исключения из листинга скрытых файлов используется директива dir-listing.hide-dotfiles = "enable". Список исключений, основанный на регулярных выражениях, задаётся директивой dir-listing.exclude

Статья взята с сайта: https://wiki.archlinux.org/index.php/Lighttpd_%28%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%29  

Полезная статья: http://www.unixtips.ru/tag/lighttpd/

MySQL, PHP

Современные веб-технологии предусматривают широкое использование т.н. "движков", для поддержки которых требуются PHP и MySQL, поэтому самое время добавить их к нашему серверу. Сначала установим PHP:

sudo apt-get install php5-cgi

Затем в /etc/php5/cgi/php.ini найдем и раскомментируем следующую строку:

cgi.fix_pathinfo = 1

Теперь включим поддержку PHP в lighttpd:

sudo lighttpd-enable-mod fastcgi

Перезапустим веб-сервер:

sudo service lighttpd restart

Для проверки создадим в блокноте файл следующего содержания:

<?php
phpinfo();
?>

И сохранив его как test.php разместим в /var/www нашего сервера, затем наберем в браузере http://site.local/test.php после чего вы увидите стандартную страницу с информацией о РНР.

Следующим шагом установим сервер баз данных MySQL и модуль PHP для работы с ним:

sudo apt-get install mysql-server mysql-client php5-mysql

По умолчанию MySQL сервер использует кодировку latin1, в то время как большинство современных движков работают в UTF-8. Поэтому откроем /etc/mysql/my.cnf и добавим в секции [client] и [mysqld] следующие строки:

[client]
default-character-set=utf8
...
[mysqld]
character_set_server=utf8
collation_server=utf8_unicode_ci

Перезапустим MySQL:

service mysql restart

Для удобного управления СУБД установим пакет phpMyAdmin:

sudo apt-get install phpmyadmin

В процессе установки не забудьте указать используемый вами веб-сервер, в нашем случае lighttpd, инсталлятор сам произведет все требуемые настройки.

Набрав в браузере http://site.local/phpmyadmin вы окажетесь на страничке входа данной утилиты, для авторизации используйте имя пользователя root и пароль указанный на этапе установки MySQL. В данном случае не стоит путать пользователя root c одноименным системным пользователем, в данном случае речь идет о суперпользователе СУБД.

SSL

Setting up a simple SSL configuration with Lighttpd is quite easy. Though this method should be used with care because this setup will only provide proper encryption, not authentication! The user will be presented with a query whether to accept the certificate or not!

First, go into your SSL Certificates directory and do:

cd /etc/lighttpd/certs
openssl req -new -x509 -keyout lighttpd.pem -out lighttpd.pem -days 3650 -nodes
chmod 400 lighttpd.pem

The previous instuctions were saying the file should be owned by www-data (depending on the OS) but this is a really bad idea (in case the server gets compromised etc.). As lighttpd starts with root-privileges and drops his rights, you can safely set the owner of the certificate to root and chmod 400 it.

Then edit /etc/lighttpd/lighttpd.conf and add:

$SERVER["socket"] == ":443" {
  ssl.engine = "enable"
  ssl.pemfile = "/etc/lighttpd/certs/lighttpd.pem"
}

After restarting the webserver, you should be able to access your webserver through https.

Because without ssl.ca-file configured, firefox will not accept this certificate, even if it's valid certificate.

Пример конфига

# Управление кешем браузера пользователя
$HTTP["url"] =~ "\.(jpe?g|gif|png|css|js)$" {
     expire.url = ( "" => "access 7 days" )
}
# SSL
$SERVER["socket"] == ":443" {
        ssl.engine      = "enable"
        ssl.pemfile     = "/etc/lighttpd/certs/lighttpd.pem"
}
# VIRTUAL HOST site.com
$HTTP["host"] == "site.com" {
server.document-root = "/var/www/site.com"

# Открыть доступ для просмотра папки /download
$HTTP["url"] =~ "^/download($|/)" {
   dir-listing.activate = "enable"
}
}
# Перенаправляем трафик HTTP => HTTPS
$SERVER["socket"] == ":80" {
   $HTTP["host"] =~ "site2.com" {
      url.redirect = ( "^/(.*)" => "https://site2.com/$1" )
      server.name                 = "site2.com"
   }
}
# phpMyAdmin доступен только по защищённому протоколу
$SERVER["socket"] == ":80" {
   $HTTP["url"] =~ "^/phpmyadmin" {
      url.redirect = ( "^/(.*)" => "https://192.168.0.10/$1" )
   }
}
# phpMyAdmin для определённых IP адресов
$HTTP["remoteip"] != "192.168.0.0/24" {
   $HTTP["url"] =~ "^/phpmyadmin" {
      url.access-deny = ( "" )
   }
}
# Backend сайта для определённых IP адресов
$HTTP["remoteip"] != "192.168.0.0/24" {
   $HTTP["url"] =~ "^/site.com/administrator" {
      url.access-deny = ( "" )
   }
}
# ограничит скорость до 1 мбит/с
connection.kbytes-per-second = 1024

cache

Очищать директорию от старых файлов, для примера, которые старше 10 дней необходимо для того чтобы устаревшие файлы не накапливались и не забивали свободное дисковое пространство. Можно создать задание в cron:

01 2 * * * /usr/bin/find /var/cache/lighttpd/compress/ -type f -atime +10 -print0 | /usr/bin/xargs -0 -r /bin/rm

Из этого можно понять что задание будет выполняться в 2:01 ночи и будет удалять файлы из директории /var/cache/lighttpd/compress/ все файлы старше 10 дней.

  • Сборка ПК для дома и офиса

  • Бесплатная диагностика

  • Гарантия

  • Самые низкие цены