Lighttpd для отдачи статики

Категория: / DEV Блог / PHP (LAMP)
Статический контент - картинки, таблицы стилей, внешние яваскрипты создают дополнительную нагрузку для апача.
В то время как основная работа апача - это (в нашем случае) обработка серверных скриптов на php.

Воспользуемся легким веб сервером lighttpd и перемести все запросы к статическим файлам с основного
сервера на вспомогательный.

Для функционирования вспомогательного сервера Lighttpd оптимальным будет получение отдельного IP для него.
Чтобы использовать стандартный 80 порт (http).

IP1 89.268.4.50 (apache2)
IP2 89.267.4.50 (lighttpd)

Добавляем описание интерфейса в rc.conf

ifconfig_em0="inet 89.268.4.50  netmask 255.255.255.0"
ifconfig_em0_alias0="inet 89.267.4.50 netmask 255.255.255.0"
route_net2="-net 89.267.4 89.267.4.1"
static_routes="net2"
defaultrouter="89.268.4.1"


Конфигурируем неймед для нужного домена.
Вся статика будет отдаваться через static.domen.ru (то есть через поддомен)

static                  IN              A               89.267.4.50


Простым методом переписывания ссылок на статику является использование mod_rewrite.
В этом случае не надо прибегать к помощи верстальщиков-программистов для изменения программной части.
Ссылки будут переписаны на вспомогательные автоматически. Минусом решения является - редирект 302
при обращении по URL объекта.

# static
RewriteCond %{REQUEST_FILENAME} \.(jpg|jpeg|gif|png|css|js|pl|txt|xml|zip|bzip|gz|rar)$
RewriteRule ^(.*) http://static.host.ru/$1 [L]


Оптимальным же является решение прописать точные сслыки в самом коде приложения.

Настройка lighttpd

С расчетом на виртуальные хосты добавим директиву в lighttpd.conf
Она подключит все файлы *.conf из папки к конфигурации lighttpd.

include_shell "find /usr/local/etc/apache22/lighttpd/ -maxdepth 1 -name '*.conf' -exec cat {} \;"


Пример виртуального хоста:

$HTTP["host"] == "static.host.ru" {
 
  $HTTP["url"] !~ "\.(css|html|jpg|gif|png|js|zip|bzip|gz|rar)$"  {
    url.access-deny         = ( "" )
  }
 
  server.document-root = "/www/host.ru/htdocs/"
  accesslog.filename = "/var/log/httpd/x.light.access.log"
  server.errorlog = "/var/log/httpd/x.light.error.log"
}


Проверьте настройки lighttpd, чтобы он не мог отдавать php файлы - рискуете отдать код своего сайта как есть!

После добавления настроек, ребутаем сеть, перезагружаем неймед и lighttpd

/etc/rc.d/netif restart && /etc/rc.d/routing restart
rndc reload
/usr/local/etc/rc.d/lighttpd restart


Проверяем.