Установка Lighttpd+MySQL+PHP5 на Debian 7 / CentOS 7

Данный сервер отличается умеренным аппетитом к ресурсам системы и высокой скоростью работы.

Устанавливаем web сервер Lighttpd
apt-get install lighttpd

После установки, сервер готов к работе, и отзывается по IP адресу вашей системы, его корневая директория находится /var/www

Другой вариант установки:
Поменять в etc/apt/source wheezy на jessie на момент установки lighttpd
wheezy (stable) (httpd): fast webserver with minimal memory footprint
1.4.31-4+deb7u3: amd64 armel armhf i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 s390x sparc
jessie (testing) (httpd): fast webserver with minimal memory footprint
1.4.35-3: amd64 arm64 armel armhf i386 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc ppc64el s390x

Проверка версии lighttpd командой
lighttpd -v


В ответ вы получите следующее:
lighttpd/1.4.35 — a light and fast webserver
Build-Date: May 1 2014 10:10:10

Для CentOS 7 подключаем EPEL Repository:
rpm -Uvh http://mirror.pnl.gov/epel/7/x86_64/e/epel-release-7-2.noarch.rpm


и затем устанавливаем:
yum install lighttpd


Устанавливаем MySQL 5
apt-get install mysql-server mysql-client

При установке указываем пароль для пользователя root, который будет управлять базами данных.

Устанавливаем PHP5
apt-get install php5-cgi

Все здорово, но установленное PHP не поддерживает работу с MySQL, необходимо это исправить.
До устанавливаем следующие пакеты:
apt-get install php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl


Активируем модуль fastcgi:
lighttpd-enable-mod fastcgi 
lighttpd-enable-mod fastcgi-php


Теперь нам необходимо создать символьную ссылку, которая будет указывать из /etc/lighttpd/conf-enabled/10-fastcgi.conf в директорию /etc/lighttpd/conf-available/10-fastcgi.conf
ls -l /etc/lighttpd/conf-enabled


Перезапускам lighttpd:
/etc/init.d/lighttpd restart


Вот и все, просто, быстро, удобно!

PS:
Чтобы скрыть название или версию lighttpd нужн в конфиг добавить:
server.tag = «you_name_httpd»

Чтобы включить mod_rewrite нужно в конфиге раскомментировать:
server.modules = (

«mod_rewrite»,

Для того чтобы работал rewrite нужно в конфиге прописать например следующее:
url.rewrite-once = (
"^/([^.]+)$" => "/index.php?action=$1"
)
этот пример для такого преобразования: ваш_сайт/траляля будет ссылаться на ваш_сайт/index.php?action=траляля

Для того, чтобы принудительно использовать SSL на определённых сайтах, можно вписать в файл /etc/lighttpd/conf-enabled/05-ssl.conf следующую условную секцию:
$HTTP[«host»] =~ "^domain(1\.net|2\.ru)$" {
url.redirect = (".*" => «%0$0»)
}

5 комментариев

avatar
Пример одного из конфигов:
server.document-root = "/usr/local/www" #Корневая директория вашего веб-сервера
server.port = 80 # Порт слушаемый для http
server.username = "www" # Имя пользователя, от имени которого запускается сервер
server.groupname = "www" # Группа пользователя
server.bind  = "192.168.0.10" # Привязываем сервер к определенному адресу
server.tag ="lighttpd 1.4.27/FreeBSD 7.3" # Тут можно написать хоть "IIS/Win32" - это будет отображаться в строке идентификации сервера
server.event-handler = "freebsd-kqueue" # Метод разбивки на пуллы (!) Подходит только для FreeBSD, для других ОС методы свои

#Говорим куда писать логи
server.errorlog            = "/var/log/lighttpd/error.log"
accesslog.filename         = "/var/log/lighttpd/access.log"

# Подключаем модули
server.modules              = (
            "mod_access",
            "mod_accesslog",
            "mod_fastcgi",
            "mod_cgi",
            "mod_rewrite",
            "mod_auth",
            "mod_compress",
            "mod_alias"
)


# Расписываем типы файлов
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"          =>      "audio/x-wav",
  ".wav"          =>      "audio/x-wav",
  ".gif"          =>      "image/gif",
  ".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",
  ".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"
 )

# Делаем возможной http-авторизацию. Заморачиваться с шифрованием не стал - ктож меня будет из локалки-то ломать?
auth.debug = 2
auth.backend = "plain"
auth.backend.plain.userfile = "/usr/local/etc/lighttpd/.lighttpdpassword" # Файл с паролями

# Запускаем  FastCGI посредством php-fpm
fastcgi.server = ( ".php" =>
  ((
              "host" => "127.0.0.1",
                 "port" => 9000,
      )
    )
 )

#Подключаем модуль CGI для запуска перлов
cgi.assign                 = ( ".pl"  => "/usr/bin/perl",
                               ".cgi" => "/usr/bin/perl" )

# Определяем индексы
index-file.names = ( "index.html", "index.php", "index.pl", "index.cgi" )

# А вот теперь самое интересное - виртуалхосты
#Первый хост я использую для netams, который у меня использует базу данных на PostgreSQL, которая в свою очередь управляется через веб-морду phpPgAdmin
$HTTP["host"] =~ "(^|\.)stat\.svyaznoy\.kg$" {
server.document-root = "/usr/local/www/netams"
dir-listing.activate = "disable" # показывать-ли содержимое папки? Нет.
dir-listing.encoding = "utf-8" # Кодировка отображения содержимого папки
alias.url = ( "/pgadmin" => "/usr/local/www/phpPgAdmin") # Алиас для phpPgAdmin
server.errorlog = "/var/log/lighttpd/stat.error.log" # Куда же без логов  :)
accesslog.filename = "/var/log/lighttpd/stat.access.log"
server.error-handler-404 = "/e404.php" # Страница ошибки
# Для доступа к определенным папкам используется http-авторизация. Тут и расписываем что куда.
auth.require = ( "/cgi-bin/admin/" =>
(
"method" => "basic",
"realm" => "Password protected area",
"require" => "user=admin"
)
)
# Поскольку netams складывает свою перловую кашу с граблями в поддиректории, появилась необходимость расписать что куда.
$HTTP["url"] =~ "/cgi-bin/" {
      cgi.assign = ( ".pl" => "/usr/local/bin/perl",
      ".cgi" => "/usr/bin/perl" )
  }
$HTTP["url"] =~ "/cgi-bin/admin/" {
        cgi.assign = ( ".pl" => "/usr/bin/perl",
              ".cgi" => "/usr/bin/perl" )
                }
}

# А теперь собственно то, ради чего все и затевалось - SSL

$HTTP["host"] =~ "(^|\.)gate\.svyaznoy\.kg$" {
server.document-root = "/usr/local/www/test"
dir-listing.activate = "enable"
dir-listing.encoding = "utf-8"
server.errorlog = "/var/log/lighttpd/gate.error.log"
accesslog.filename = "/var/log/lighttpd/gate.access.log"
server.error-handler-404 = "/e404.php"
}

# При работе с SSL лайти не понимает имен сервера, так что придется использовать непосредственно IP-адресацию
$SERVER["socket"] == "192.168.0.10:443" {
  ssl.engine                  = "enable" # Включаем SSL
  ssl.ca-file                   = "/usr/local/etc/lighttpd/ca.crt" # Путь к кормевому сертификату (если у вас его нет можно просто исключить эту строчку)
  ssl.pemfile                   = "/usr/local/etc/lighttpd/ca.pem" # Путь к сертификату сервера
  server.name                 = "gate.svyaznoy.kg" # Описываем имя сервера
  server.document-root        = "/usr/local/www/secure/" # Папка, содержимое которой нам и надо защитить
  ssl.verifyclient.activate  = "enable" # Включаем проверку клиентского сертификата. Если эту и 2 последующие строки исключить, сервер не будет запрашивать проверку, а будет прописывать в браузер временную копию сертификата
  ssl.verifyclient.enforce   = "enable"
  ssl.verifyclient.depth     = "1"
# Алиас для phpMyAdmin
  alias.url = ( "/pma" => "/usr/local/www/secure/phpMyAdmin")
}
avatar
Полезный мануал по настройке — wiki.archlinux.org/index.php/Lighttpd_%28%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%29 на русском
avatar
Anti-DDoS: Конфигурирование LightHTTPD

В этой теме я хотел бы рассказать о том, как сконфигурировать сервер Lighthttpd для оптимальной производительности.
Уже из самого названия продукта видно, что этот сервер «лёгкий» — он заточен под максимальную скорость работы.
А знание конфигурации позволит оптимально настроить сервер под Ваши нужды и нагрузки.

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

Сужаем канал

Директива connection.kbytes-per-second позволяет ограничить скорость соединения с сервером. Это позволит дольше использовать ресурсы канала во время DDoS-атаки.
Следующий код ограничит скорость до 1 мбит/с:
Код:

connection.kbytes-per-second = 1024

По умолчанию директива равна 0, т.е. ограничения отсутствуют.
Кроме того, можно ограничить скорость соединения для определённого хоста (к примеру, если идёт http-ddos на один из сайтов на сервере):
Код:

$HTTP[«host»] == «victim.com» { server.kbytes-per-second = 32 }

Помимо этого, существует плагин mod_speed.c, который позволяет регулировать скорость прямо в скриптах. Пример на php:
PHP код:
<?php
header(«X-LIGHTTPD-KBytes-per-second: 50»);
echo('Content with speed, limited to 50 kbit/s');
?>

Ограничиваем запросы

Для того, чтобы сессии соединения сбрасывались как можно быстрее и количество запросов в эту сессию было как можно меньше, надо регулировать keep-alive директивы. Вот значения по умолчанию:
Код:

server.max-keep-alive-requests = 16 server.max-keep-alive-idle = 5 server.max-read-idle = 60 server.max-write-idle = 360

Вы можете уменьшать их с увеличением нагрузки (например, во время DDoS-атаки), вплоть до обнуления. Первые две директивы — это соответственно максимальное количество запросов во время сессии и длительность сессии (в секундах)

Регулируем дескрипторы

Для каждой открытой, скажем, php страницы на сайте создаётся файловый дескриптор.
Если идёт атака, то файловых дескрипторов создаётся очень много, и если их количество превысит установленый лимит, сервер перестанет отвечать на запросы.
Поэтому при больших нагрузках рекомендуется увеличивать значение директивы server.max-fds. По умолчанию оно равно 1024.
Данная директива работает лишь в случае, когда lighthppd запущен под root.
Код:

server.max-fds = 4096

Количество соединений

Директива server.max-connections служит для определения максимального количества соединений сервера.
По умолчанию она равна 1024, как и server.max-fds, но рекомендуется устанавливать для неё значение, равное 1/2 или 1/3 от значения server.max-fds, поскольку не все файловые дескрипторы отвечают соединениям — многие используются для fastcgi или файлов.

Всё

Больше информации можно найти на lighttpd.net.
Удачи в Анти-ДДоСе!

Баним IP-адреса

Если атака ведётся с какого-то диапазона IP-адресов или с нескольких IP-адресов, логично забанить эти адреса. Для этого воспользуемся условной конструкцией, глобальными переменными и регулярным выражением:
Код:

$HTTP[«host»] == «victim.com» { $HTTP[«remoteip»] = "^(123\.123\.123\.[0-255])$" { url.access-deny = ( "" ) } }

Ещё ограничиваем трафик

Вот ещё некоторые меры, которые могут помочь для экономии трафика: бан ботов по user-agent и анти-хотлинкинг.
User-Agent банится так:
Код:

$HTTP[«useragent»] =~ «libwww-perl» { url.access-deny = ( "" ) }

Это конечно можно сделать и в robots.txt, но ведь бот может и не проверять этот файл, так что на уровне сервера это надёжнее.
Хотлинкинг же запрещается следующим образом:
Код:

$HTTP[«referer»] !~ "^($|http://vitim\.com)" { url.access-deny = (".bmp", ".jpg", ".jpeg", ".png",".ico" ) }

Таким образом, мы запретили выкладывать на других хостах картинки с нашего сервера. Это бывает весьма полезно, когда картинок много и их постоянно воруют. Того же эффекта можно достичь при помощи .htaccess. Кстати бывали и прецеденты, когда DDoS-атака проводилась с помощью очень частого показа картинок с сервера (канал забивался).
avatar
полезные ссылки:
sysadmins.ws/viewtopic.php?f=91&t=1250

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