Настройка lighttpd сервера на андроид

Обновлено: 18.05.2024

Предполагается, что до установки веб-сервера изучена важная предварительная информация по основам работы с виртуальным сервером, изложенная в отдельной статье.

Предварительные настройки

Установка минимума необходимых компонентов:

Указаны компоненты, которые отсутствуют в минимальной конфигурации Debian и могут частично присутствовать в другой конфигурации.
При желании можно руссифицировать интерфейс операционной системы и прикладных программ.
Команда:

В появившемся интерфейсе нужно выбрать русский язык - локаль: ru_Ru.UTF-8.
Затем ту же локаль выбрать по умолчанию.
После нового подключения к серверу через SSH-клиент русская локаль должна работать.

MariaDb

Установка необходимых пакетов:

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

Затем для безопасности рекомендуется выполнить:

В появившемся диалоге потребуется указать только что заданный вами root-пароль, ответить на вопросы (обычно это n,y,y,y,y)

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

PHP 7 (PHP-FPM)

В связи с тем, что на момент подготовки данной статьи (начало 2016 года) в стандартном репозитарии Debian 8 отсутствует пакет PHP 7 версии, потребуется подключить сторонний репозитарий:

Добавьте в имеющийся файл следующие строки:

Для корректной работы с пакетами нужна установка ключа этого репозитария:

Обновление списка пакетов:

Установка пакета PHP 7:

Установка расширений PHP для работы CMS:

Приведенный набор расширений может оказаться избыточным, конкретный выбор зависит от CMS. Лишние расширения в теории - добавочный путь для уязвимостей.

Настройка параметров PHP в конфигурационном файле:

В этом файле для исправления настройки безопасности раскомментировать строку с текстом:

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

Перезапуск сервиса php:

Создаем резервную копию конфигурации и редактируем ее:

Заменяем содержимое редактируемого файла на нижеследующее:

Подключаем модули Лайти:

Не меняя папку, в которой находимся, создаем ссылку для запуска новой конфигурации:

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

Проверяем корректную работу полученной связки, создав тестовый файл в папке сервера по умолчанию:

Если все корректно настроено, то у вас получится увидеть большую тестовую страницу PHP, открыв в браузере URL:

Не забудьте после теста удалить файл info.php.

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

Для определения пути расположения каждого сайта открываем файл конфигурации Лайти:

В этом файле после строк описания сервера (server.port = . ) добавляем строки для описания каждого сайта:

Для применения новых параметров - новый перезапуск Лайти:

Чистые ссылки

Ниже описана конфигурация, предназначенная для CMS Drupal 7. Она подходит, как есть, для большинства других CMS, но не для Drupal 8.

Устанавливаем LUA и magnet ( ниже указана текущая версия Lua, которая может в дальнейшем отличаться цифрой):

Подключаем мод magnet:

Редактируем файл конфигурации Лайти:

добавляем в начале файла в списке модулей строку:

а в конце файла добавляем строку, указывающую путь к файлу скрипта "drupal.lua" :

Создаем файл скрипта:

В том случае, если файлы CMS находятся не в корневой папке сайта, потребуется изменить в файле строку с текстом "local prefix". Например, для локальной папки с сайтом /drupal эта строка будет выглядеть так:

Снова перезапускаем Лайти, чтобы изменения настроек вступили в силу:

Почти наверняка потребуется отправка почты с сайта, например, для регистрации новых пользователей, оповещении об новостях, отчетов о доступных обновлениях и т.д. Если тестовая отправка не работает, как это было в моем случае, то потребуется настроить почтовый агент. В моем случае это Exim. Установка Exim:

Отвечаем на вопросы в появившемся интерфейсе настройки, например:

  • Интернет сайт (прием и отправка напрямую).
  • Имя сервера (стоит по умолчанию). 127.0.0.1
  • Другие места (пусто)
  • Домены релейные (пусто)
  • Сокращать кол-во dns-запросов – нет
  • Метод доставки – любое значение
  • Делить на маленькие файлы – нет
  • Адрес для сбора почты postmaster | root – указать

Полученные настройки будут сохранены в файле /etc/exim4/update-exim4.conf
Но перед тестированием работы почты нужно не забыть запустить:

Contents

Установка

Настройка

Совет: Проверить правильность настроек и выявить ошибки можно с помощью команды:

Если такого пользователя нет в системе, добавляем его командой:

Проверим правильность установки

При этом файлы будут включаться в порядке их следования в каталоге, что может привести к непредсказуемым результатам. В качетсве решения можно перед названием файла ставить цифры, например, 10-auth.conf , 20-fastcgi.conf , 21-fastcgi-php.conf .

Совет: Для корректной обработки различных типов файлов нужно определить mime-типы: Совет: После изменения конфигурационных файлов не забудьте перезапустить сервер: Важно: По умолчанию lighttpd будет запускать процессы от пользователя и группы "http".

Этот модуль позволяет выполнять различные CGI программы. Пример конфигурации CGI модуля приведён ниже:

Совет: Чтобы файлы с некоторым расширением исполнялись безо всякой спец. программы, просто не указывайте никакую CGI-программу:

Файл без расширения, но имеет определённую правую часть URL:

FastCGI

Устанавливаем FastCGI командой:

Важно: По умолчанию lighttpd будет запускать процессы от пользователя и группы "http".

Следующее содержимое нужно добавить в файл конфигурации

Устанавливаем php и php-cgi

Проверяем, что php-cgi работает:

Если вы увидели похожий вывод, значит всё установлено правильно.

Примечание: Если вы получаете ошибки, подобные этим "No input file found" при попытке получить доступ к вашему php файлу, убедитесь, что следующие директивы активированы в /etc/php/php.ini :

И что файлы доступны для чтения всем:

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

Совет: Если вы хотите, чтобы в html файлах обрабатывался php-код, добавьте в fastcgi-php.conf :

php-fpm

Устанавливаем php-fpm и запускаем демон:

Примечание: Настройки php-fpm находятся в файле /etc/php/php-fpm.conf . Подробнее о настройках php-fpm [устаревшая ссылка 2020-12-27] .

SSI (Server Side Includes — включения на стороне сервера) — несложный язык для динамической «сборки» веб-страниц на сервере из отдельных составных частей и выдачи клиенту полученного HTML-документа.

Важно: Если вы используете одновременно mod_ssi и mod_compress, то mod_ssi должен быть загружен до mod_compress.

Создаем директорию для хранения сертификатов:

Генерируем самоподписанный сертификат (пример команды):

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

Выставляем владельца и нужные права:

Вы также можете использовать named-based виртуальным хостинг, чтобы реализовать несколько SSL серверов:

Примечание: SNI поддерживается не всеми браузерами. Подробнее. IP-based виртуальный хостинг лишён этого недостатка.

mod_redirect должен быть включён:

Сжатие исходящих данных

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

На сегодня поддерживается только статичное содержимое.

Сервер автоматически договаривается какой метод сжатия использовать. Поддерживается gzip, deflate, bzip.

Ограничение на размер сжимаемых файлов: от 128 байт до 128 мегабайт.

Создаём нужную директорию и задаём владельца:

В данном примере будут удалены все файлы, которые старше 10 дней.

Совет: Вы также можете использовать условия (имя хоста или url), чтобы задать произвольный каталог для сжатых фавйлов.

Сжатие динамического контента

Для сжатия динамического контента (PHP) в /etc/php/php.ini нужно включить следующую директиву:

Совет: Вы также можете задать уровен сжатия с помощью директивы zlib.output_compression_level.

Управление кешем браузера пользователя

Можно также перечислить отдельные расширения файлов:

Альтернативу предыдущему листингу:

Виртуальные хосты

Использование условий

Первый способ заключается в изменении server.document-root в зависимости от содержимого заголовка "host".

mod_simple_vhost

Этот способ более прост и экономичен. В указанной директории хостинга имя каждого каталога соответствует аналогичному имени вируального хоста. Внутри каждого такого каталога находится dccroot вируального хоста.

Docroot для каждого вируального хоста строится из следующих трёх значений:

  • server-root
  • hostname
  • document-root

Абсолютный путь к docroot'у строится из:

в случае если путь не существует

Совет: Вы можете использовать символьные ссылки чтобы соотнести несколько имён хостов одной директории.

В качестве примера приведём следующий:

mod_evhost

Модуль evhost создаёт document-root, основываясь на шаблнах. Эти шаблоны представляют различные части запроса "host":

С помощью этого моудля можно также организовать виртуальные хосты для поддоменов:

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

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

Чтобы включить листинг для отдельного каталога укажите следующее:

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

Ограничение доступа

Для использования ограничения доступа необходим включить mod_access:

Ограничиваем доступ к файлам, заканчивающимся на "

Запрет доступа к сайту для определённого IP:

Ограничение доступа к каталогу /libraries :

Запрет доступа к каталогу /stats всех кроме IP адресов 200.19.1.5 и 210.45.2.7:

Важно: При совместном использовании директив url.access-deny и server.error-handler-404 при запросе запрещённого контента запросы будут направляться согласно директиве server.error-handler-404 (Подробнее).Чтобы этого избежать необходимо добавить server.error-handler-404 = "forbidden" внутрь условия, содержащего url.access-deny. Пример:

Аутентификация

Важно: Если mod_fastcgi и mod_auth используются вместе, то mod_auth должен быть загружен до mod_fastcgi.

Методы

  • Basic метод передаёт имя пользователя и пароль по сети в открытом виде(закодированными в base64), что способствует возникновению проблемы безопастности в случае если соединение между клиентом и сервером не шифруется.
  • Digest метод передаёт только хешированную информацию, что значительно повышает конфидециальность аутентификационных данных в незащищённых сетях.
Важно: Реализация digest метода в настоящий момент не полностью соответствует стандарту, позволяя осуществить replay attack.

Backends

  • plain
  • htpasswd (crypt only)
  • htdigest
  • ldap

Для digest аутентификации:

plain

Файл содержит строки с именами пользователей и паролями в открытом виде. Имя пользователя и пароль разделяются двоеточием. Например:

htpasswd

Файл содержит строки с именами пользователей и зашифрованными с помощью crypt() паролями. Имя пользователя и пароль разделяются двоеточием.Например:

htdigest

Файл содержит строки с именами пользователей, realm'ом и зашифрованными с помощью md5() паролями. Имя пользователя, realm и пароль разделяются двоеточием. Например:

ldap backend обычно выполняет следующие действия для аутентификации пользователя

  • анонимное соединение (при загрузке plugin'а)
  • получение DN для фильтрации = username
  • аутентификация на ldap сервере
  • рассоединение

если четвёртый шаг проходит без ошибок, то пользователь считается авторизированным

Совет: Для создания файлов htpasswd и htdigest Вы можете воспользоваться утилитами, идущими в составе пакета apache или установить apache-tools AUR из AUR.

Чтобы сгенерировать файл htpasswd введите команду:

Чтобы сгенерировать файл htdigest введите команду:

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

Кодировка по умолчанию

Чтобы установить кодировку для статических файлов, нужно добавить charset=utf-8 в директиве mimetype.assign. Например:

Важно: Для файлов, указанных в директиве ssi.extension, добавление charset=utf-8 в mimetype.assign не работает. Единственный способ указать кодировку, это добавить в секцию <head> shtml файла строку:

Кодировка для листинга каталогов устанавливается директивой:

Кодировка для php файлов устанавливается в файле /etc/php/php.ini :

Проксирование

Пример конфигурации при использовании виртуальных хостов:

Можно также перенапрвлять только скрипты с определённым расширением:

В качестве альтернативы можно использовать условие $HTTP["url"]:

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

Доступны следующие типы балансинга:

  • fair - запрос обрабатывается менее нагруженным сервером
  • round-robin - запросы обрабатывают сервера по очереди
  • hash - гарантировано один и тот же uri будет обрабатываться конкретным сервером

Производительность

Отключение Keep-Alive может помочь вашему серверу, если вы страдаете от большого количества дескрипторов файлов. Значения по умолчанию:

Если сервер обрабатывает несколько соединений сразу под высокой нагрузкой (предположим, 500 соединений одновременно в течение 24 часов), вы можете столкнуться с проблемой нехватки дескрипторов файлов

Это позволит высвободить соединения ранее, и освободит дескриптор файлов без вредные потери производительности.

Отключение Keep-Alive полностью является крайним случаем, если вы все еще хватает файловых дескрипторов:

Обработчик событий

Для Linux с ядром 2.6 и выше рекомендуется следующее значение:

Значение по умолчанию: poll (для Unix систем).

Обработчик сетевых соединений

  • linux-sendfile рекомендуется для маленьких файлов.
  • writev рекомендуется для очень больших файлов.

Максимальное количество соединений

Узнать ограничение дескрипторов файлов в вашей системе можно с помощью команды:

Если у вас сайт с большим трафиком, вы можете увеличить это ограничение:

Примеры настроек для различных CMS

phpMyAdmin

Устанавливаем необходимые пакеты:

Настройка поддержки php описана выше.

Раскоментируем следующие директивы в /etc/php/php.ini :

Также убедитесь, что директории phpmyadmin указаны в директиве open_basedir в /etc/php/php.ini

Если вы хотите, чтобы phpMyAdmin был доступен только по защищённому протоколу добавьте следюущие настройки:

Вы также можете ограничить доступ к phpMyAdmin для определённых IP адресов:

Mediawiki

Устанавливаем необходимые пакеты:

Настройка поддержки php описана выше. УБедитесь, что необходимые директории перечислены в директиве open_basedir в /etc/php/php.ini

Задаём пароль для учётной записи root MySQL:

Создаём базу данных для wiki:

Создаём пользователя для новой базы:

  • $ - пароль root MySQL.
  • $ - имя пользователя базы данных wiki.
  • $ - пароль пользователя базы данныз wiki.
Совет: Тоже самое Вы можете проделать через web-интерфейс phpMyAdmin. Совет: Для получения коротких URL в /usr/share/webapps/mediawiki/LocalSettings.php нужно добавить: Совет: Вместо директивы server.error-handler-404 = /wiki/index.php можно использовать следующие правила перезаписи: Совет: Для получения коротких URL в /usr/share/webapps/mediawiki/LocalSettings.php нужно добавить: Совет: Вместо директивы server.error-handler-404 = /index.php можно использовать следующие правила перезаписи:

texvc

Устанавлиаем необходимые пакеты:

Затем в файле /usr/share/webapps/mediawiki/LocalSettings.php добавляем:

Если MediaWiki Установлена в папку wiki, то конфиг будет выглядеть следующим образом:

Drupal

УБедитесь, что необходимые директории перечислены в директиве open_basedir в /etc/php/php.ini

Вариант 1: server.error-handler-404

Вариант 2: mod_rewrite

Мы развернули в нашей тестовой лаборатории следующую схему:

webserver-lighttpd-001.jpg

  • Роутер, настройка которого описана в данной статье, имеет IP-адрес 10.0.0.1.
  • Веб-сервер, настройкой которого мы займемся, имеет IP-адрес 10.0.0.145
  • Рабочие станции, получают сетевые настройки автоматически.

Прежде всего установим необходимые для администрирования пакеты mc и OpenSSH:

Теперь мы можем задвинуть сервер на полку в серверной и производить все операции с ним удаленно через SSH, например используя PuTTY.

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

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

webserver-lighttpd-002.jpg

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

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

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

webserver-lighttpd-003.jpg

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

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

webserver-lighttpd-004.jpg

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

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

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

webserver-lighttpd-005.jpg

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

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

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

webserver-lighttpd-006.jpg

webserver-lighttpd-007.jpg

В заключение установим на наш сервер популярный движок Joomla. Для этого скачаем с официального сайта необходимые пакеты, разместим файлы движка в /var/www (предварительно удалив все содержимое папки) и установив необходимые права на папки и файлы (см. инструкции к движку) начнем установку просто набрав в браузере адрес сайта.

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

webserver-lighttpd-009.jpg

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

В Google Play Market есть множество подобных программ и можно выбрать то, что подойдет именно вам. Ниже скрин самого верха с плай маркета по запросу "Web serwer".

локальный веб сервер для андроид

Часть из приложений платная, или триал на некоторое время - а потом покупать, есть и абсолютно бесплатные локальные веб сервера. Так-же и функционал у них разный, от простого html+php, до поддержки практически всего набора модулей и последних версий PHP+MySQL+phpmyadmin и прочих модулей.

KSWEB сервер PHP+MySQL

Этот веб сервер содержит PHP, СУБД MySQL и msmtp для поддержки функции mail в PHP. KSWEB это инструмент для веб-программирования на платформе андроид. Он позволяет вам организовать платформу для запуска и отладки сайтов на различных CMS и скриптов. Для использования приложения не нужен ROOT, но если он есть, то можно запустить сервер на стандартном порту 80.

У приложения достаточно просто и интуитивно понятный интерфейс. Приложение правда платное, после установки вам дается 5дней на использование, после чего программа потребует ввести ключ, в общем ее надо будет купить. Стоимость KSWEB PRO - $3.99. Стоимость KSWEB Standard - $2.99.

MySQL хост: localhost (or 127.0.0.1) / MySQL порт: 3306 / MySQL логин "root" с пустым паролем

Данный сервер содержит полностью готовые к работе конфигурационные файлы всех компонентов. Однако, если Вы хотите их изменить, то зайдя в настройки программы и кликнув "Внешние INI", все файлы настроек будут размещены на sdcard по адресу /mnt/sdcard/ksweb/conf/

Весит данное приложение не так много, 15,55 Мб, но после установки занимает 73,9 Мб.

локальный веб сервер для андроид

В пробной версии некоторые функции недоступны, и сразу скажу что этот сервер не поддерживает модуль mod_rewrite, и .htaccess, по этому движки (CMS) требующие наличие модуля mod_rewrite полноценно запустить не получится. Хотя думаю что в платной версии можно включить сервер ingix и на нем все заработает. А так все отлично работает, БД создаются и движки корректно встают. Ниже скрин приложения.

локальный веб сервер для андроид

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

NAMP nginx android web server

локальный веб сервер для андроид

Приложение тоже платное и имеет испытательный срок 10 дней, после чего NAMP предложит вам купить его. Весит приложение после установки 47,45 Мб. Цена приложения $ 1,99. Но во время испытательного срока приложение без ограничений, и самое главное есть поддержка mo_rewrite по умолчанию. У меня получилось без проблем запустить (Wordpress, Livestreet) на этом сервере и все работало. Ниже скриншот приложения.

локальный веб сервер для андроид

Приложение также включает PhpMyAdmin, phpFileManager, adminer. А так-же экспорт MySQL резервное копирование на Dropbox / экспортные резервные копии сайтов на Dropbox / Резервное копирование баз данных MySQL.

В целом мне этот сервер понравился, но и тут я не хотел платить и отправился на поиски холявы. Хотя порадовал тот факт что заработал мод-реврайт и свободно запустились нужные мне движки сайтов.

ServDroid.web - простой веб сервер

Так-же я опробовал и это маленькое приложение. На самом деле я пробовал гораздо больше, просто много удалял сразу из-за рекламы или триальных периодов. Некоторые приложения были трудны в освоении или не нравились интерфейсом. Но этот маленький ServDroid.web мне понравился своей простотой. Приложение весит всего 0,96 Мб, а после установки 3,49 Мб.

По сути я так понимаю это не совсем сервер, но он локально вполне корректно отображает html страницы и переходит по ссылкам на другие страницы локального сайта. Показывает он страницы в своем окне, но так-же можно при запущенном приложении открыть свой браузер и сайты откроются в нем, нужно только адресную строку ввсети "http://localhost:8080". Ниже скриншот приложения с открытой страницей тестового сайта для примера.

локальный веб сервер для андроид

Сразу скажу что кроме просмотра html страниц это приложение ничего не может. У меня не заработали даже страницы с расширением (.php). Так-же не выполняется php на html страницах ни в самом приложении, ни в браузере. В общем эта программка подойдет тем, кто например занимется только html+css, или у кого сайт на чистом html.

Вот еще який представитель подоного рода приложений для платформы андроид. Весит приложение 19.96 Мб, а после установки 69.57 Мб.

локальный веб сервер для андроид

Этот локальный сервер мне понравился больше всего из опробованых, и я им пользуюсь и сейчас. Но он как и множество подобных не понимает .htaccess и почему-то тоже не работает mod_rewrite, хотя он вроде присутствует. Но мне это не мешает так-как я не использую mod_rewrite в своих сайтах, да и БД (MySQL)не использую, и движки (CMS). У меня простенькие сайты на html+php и этот сервер отлично справляется с этим, так-же прекрасно через phpmyadmin создаются MySQL если нужно.

локальный веб сервер для андроид

Немного технических характеристик "Палапа веб сервер"

На этом я заканчиваю этот небольшой обзор, надеюсь информация для вас была полезна.

Читайте также: