Проксировать локальные сервисы через Lighttpd - готовые рецепты

Тут собраны разные репепты для сисадминских дел, доступные всем без регистрации
Ответить
kasak
Администратор
Сообщения: 10
Зарегистрирован: 14 янв 2026, 18:28

Проксировать локальные сервисы через Lighttpd - готовые рецепты

Сообщение kasak »

Lighttpd - простой и экономичный http сервер, и я считаю его основное преимущество это экономия памяти.
Мой лайти, на котором включено всё нижеперечисленное и даже больше, потребляет 11 Мб памяти. А самые простые конфигурации потребляют мегабайта 4. Единственный недостаток лайти - невозможность подключиться к https бекенду.
Сегодня озу - дорогая штука, а иногда хочется удобства.
Зачем вообще проксировать локальные сервисы?
Например, если у тебя есть какой-нибудь домашний мини-сервер где ты запустил кучку мини сервисов, и не хочется запоминать все эти сложные порты, можно сделать прокси на лайти, и иметь доступ через url например server.local/transmission/ или server.local/gerbera/

Переходим к сути:
Если уже есть готовая папка с конфигурацией лайти, как например в fedora, нужно создать директорию /etc/lighttpd/conf-enabled
И внутри создавать локальные конфигурации.
Например:

Конфигурация для adminer/phpmyadmin:

Код: Выделить всё

server.modules += ( "mod_fastcgi" )
server.modules += ( "mod_alias" )
alias.url += ( "/adminer" => "/var/www/adminer/" )

$HTTP["url"] =^ "/adminer" {
index-file.names += ( "index.php" )
fastcgi.server = ( ".php" => ( "adminer" => ( "socket" => "/var/run/php-fpm/www.sock", "broken-scriptfilename" => "enable") ) )
}
Самый простой прокси, для stork
В stork-server должна быть настроена опция BASE_URL:

Код: Выделить всё

server.modules += ( "mod_proxy" )

$HTTP["url"] =^ "/stork" { proxy.server = ( "" => ( ( "host" => "localhost", "port" => "8080") ) ) }
Прокси для transmission
Тут уже более сложный вариант. Мы указываем в настройках хост (localhost) и говорим лайти чтобы он подменял адрес хоста в запросах, таким образом трансмишен всегда будет думать что обращение идёт с локалхоста, и не нужно править настройки трансмишена.

Код: Выделить всё

$HTTP["url"] =^ "/transmission" { 
 proxy.server = ( "" => ( "localhost" => ( "host" => "localhost", "port" => "9091") ) ) 
 proxy.replace-http-host = "enable" 
 }
Прокси для герберы
В гербере можно не править дефолтные настройки, но настоятельно рекомендуется сделать адрес сервера с герберой постоянным. Тут аналогично с трансмишеном мы используем подмену имени хоста, но ещё и переписываем url, т.к. герберу насколько я знаю не получится настроить на работу с путями. И нужно учитывать, что при использовании подобных трюков, нужно не забывать добавлять в конце url слеш.
Например server.local/gerbera/

Код: Выделить всё

$HTTP["url"] =^ "/gerbera" { proxy.server = ( "" => ( "192.168.0.1" => ( "host" => "192.168.0.1", "port" => "49152")) )
 proxy.replace-http-host = "enable"
 proxy.header = ( "map-urlpath" => ( "/gerbera" => "" ) )
}
Как сделать забавные страницы для ошибок:

Код: Выделить всё

server.errorfile-prefix    = server_root + "/lighttpd/errors/"
Как сделать листинг директории со свистелками и перделками:
/iso тут является алиасом на папку с исошниками

Код: Выделить всё

$HTTP["url"] =^ "/iso" {
 dir-listing.activate = "enable"
 dir-listing.show-header = "enable"
 dir-listing.set-footer = "<img src=/tftpboot/d/nyan.gif height=200 />"
}
Как включить ssl и ipv6:

Код: Выделить всё

$SERVER["socket"] == "[::]:80" {  }

server.modules += ( "mod_openssl" )
$SERVER["socket"] == ":443" {
 ssl.engine = "enable" 
 ssl.pemfile = "/etc/ssl/cert.crt"
 ssl.privkey = "/etc/ssl/private/key.key"
}
Как прикрутить авторизацию
В примере указано как сделать авторизацию на весь сервер целиком. Допускается встраивать эту авторизацию между условиями например в $HTTP["url"]

Код: Выделить всё

server.modules += ( "mod_authn_file" )
auth.backend = "htpasswd"
auth.backend.htpasswd.userfile  = "/etc/lighttpd/http.passwd"
auth.require = ( "/" =>
                (
                "method"    => "basic",
                "realm"     => "private-property",
                "require"   => "valid-user"
                )
)
Пожалуйста не забывайте что данный материал это коллекция "быстрых рецептов" а не попытка переписать вики от лайти.
К сожалению тут пока нет информации про home assistant, поскольку hass ну вообще никак не дружит с путями (server.local/hass/ сделать не получится, ни один клиент это не съест)
Зато можно не открывать лишние порты в фаерволе для остальных сервисов. И не нужно забивать голову лишними настройками. Надеюсь что-нибудь из этого окажется для вас полезным.
Ответить