В репозитории OpenWrt есть несколько веб-серверов, практически на любой вкус. Причём, при установке веб-интерфейса LuCI автоматически устанавливается сервер uHTTPd. Однако, мы вправе выбирать, чем нам удобнее пользоваться. Так я, например, предпочитаю сервер Lighttpd — он легковесный, но обладает довольно большими возможностями и гибко настраивается под различные нужды. Поэтому сейчас попробуем его установить и настроить на роутере с OpenWrt.
Установка Lighttpd и PHP
opkg update
opkg install lighttpd lighttpd-mod-cgi php7 php7-cgi
Настройка вэб-сервера Lighttpd
Теперь редактируем файл /etc/lighttpd/lighttpd.conf. Ниже я привожу только те фрагменты, которые мы изменяем.
Задаём корневую директорию сервера. Так как директория по умолчанию /www используется для LuCI, выбираем другую:
server.document-root = "/usr/www/website1"
Директория server.document-root, заданная глобально, будет использоваться по умолчанию для всех запросов без Host: заголовка и всех прочих запросов, если мы не переназначим её другими настройками — например так:
server.document-root = "/usr/www/website1"
$HTTP["host"] == "website2.my.domain" {
server.document-root = "/usr/www/website2"
}
В данном случае, все запросы с заголовком Host: website2.my.domain будут направляться в директорию /usr/www/website2 , все остальные — в /usr/www/website1 .
Укажем, что по умолчанию сервер будет работать на 80 порту, а доступ к LuCI мы можем сделать, например, по 81 порту:
server.port = 80
$SERVER["socket"] == ":81" {
server.document-root = "/www"
cgi.assign = ( "luci" => "/usr/bin/lua" )
}
Так как LUCI — это интерфейс управления всей системой, очевидно, он требует root-доступа. Поэтому, закомментируем в конфиге строки server.username и server.groupname (хотя в других случаях это делать не рекомендуется):
#server.username = "http"
#server.groupname = "www-data"
Указываем веб-серверу, что необходимо искать файлы index.php :
index-file.names = ( "index.php", "index.html",
"index.htm", "default.htm",
)
Запрещаем вэб-серверу выдавать содержимое .php файлов в статическом виде:
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
Далее редактируем подключаемый файл /etc/lighttpd/conf.d/30-cgi.conf (в более ранних версиях OpenWrt его не было, все настройки были непосредственно в файле /etc/lighttpd/lighttpd.conf ).
Проверяем, что подключен CGI модуль :
server.modules += ("mod_cgi" )
Указываем CGI программу для обработки .php файлов — php-cgi:
cgi.assign = ( ".pl" => "/usr/bin/perl",
".cgi" => "/usr/bin/perl",
".rb" => "/usr/bin/ruby",
".erb" => "/usr/bin/eruby",
".py" => "/usr/bin/python",
".php => "/usr/bin/php-cgi" )
Настройка PHP
Проверяем, что в /etc/php.ini включена опция:
cgi.fix_pathinfo=1
Так же, указываем корневую директорию файлов для php:
open_basedir = "/usr/www"
Запуск сервера
Теперь, когда всё настроили, можем протестировать работу нашего сервера. Создадим корневую директорию для нашего веб-сайта и тестовую страничку:
mkdir -p /usr/www/website1
echo "<?php phpinfo(); ?>" > /usr/www/website1/index.php
Останавливаем uhttpd и запускаем lighttpd:
/etc/init.d/uhttpd stop
/etc/init.d/uhttpd disable
/etc/init.d/lighttpd start
/etc/init.d/lighttpd enable
Теперь можно попробовать зайти на наш тестовый сайт: http://website1.my.domain ; и в веб-интерфейс LuCI: http://website1.my.domain:81 .
Полезные ссылки
OpenWrt Wiki — howto: Lighttpd
OpenWrt Wiki — howto: Set up a LAMP stack on OpenWrt
OpenWrt Wiki — howto: LuCI on lighttpd
OpenWrt Wiki — howto: PHP
Lighttpd Wiki