Суть проблемы:
У нас есть:
1. Есть 2 локальные сети 192.168.0.0/24 и 192.168.1.0/24 и айпишники на сервере 192.168.0.1 и 192.168.1.1
2. Есть статический внешний айпишник 1.2.3.4 получаемый через pppoe.
3. Есть доменное имя example.ru.
4. Есть доменные имена test.example.ru, test1.example.ru и (example).example.ru
5. Есть доменное имя example1.ru.
Задача:
1. Отдавать на запрос по адресу
http://192.168.0.1 и
http://192.168.1.1 редирект на
https://192.168.0.1 и
https://192.168.1.1 соответственно используя при этом собственные сертификаты, самоподписанные разумеется.
2. Отдавать на запрос по адресу
http://example.ru редирект на
https://example.ru3. Делать редиректы с любых http(s)://www.anyExampleHost.ru на http(s)://anyExampleHost.ru
4. Проксировать
https://test.example.ru и
https://test1.example.ru на сервер(а) в локальной сети 192.168.0.0/24 и для каждого домена использовать свой SSL сертификат(wildcard'a нет).
Я знаю про SNI и что с версии 1.4.24 он поддерживается в лайти. Моя версия лайти:
# lighttpd -V
lighttpd/1.4.30 (ssl) - a light and fast webserver
5. Проксировать example1.ru на сервер(а) в локальной сети 192.168.0.0/24
6. Использовать cgi только после прохождения web аутентификации построенной на htdigest, и только для доменов
http://192.168.0.1,
http://192.168.1.1,
https://example.ru7. Проходить web аутентификации построенной на htdigest для всех запросов, кроме http(s)://test1.example.ru и http(s)://example1.ru (LDAP сервера пока нету

)
8. Для доменов третьего уровня которые явно не прописаны делать редирект http(s)://(example).example(1).ru http(s)://example(1).ru
9. При запросе по внешнему айпи адресу http(s)://1.2.3.4 должен быть редирект на
http://example1.ruМой конфиг lighttpd:
# lighttpd configuration file
#
## modules to load
# all other module should only be loaded if really neccesary
# - saves some time
# - saves memory
server.modules = (
"mod_evasive",
"mod_accesslog",
"mod_rewrite",
"mod_redirect",
# "mod_alias",
"mod_auth",
# "mod_status",
# "mod_setenv",
# "mod_fastcgi",
"mod_proxy",
# "mod_simple_vhost",
"mod_cgi",
# "mod_ssi",
# "mod_usertrack",
# "mod_expire",
# "mod_webdav",
"mod_compress"
)
server.force-lowercase-filenames = "enable"
server.max-keep-alive-requests = 16
server.max-keep-alive-idle = 5
server.max-read-idle = 60
server.max-write-idle = 360
server.follow-symlink = "enable"
evasive.max-conns-per-ip = 10
## a static document-root
server.document-root = "/www/"
## send a different Server: header
## be nice and keep it at lighttpd
server.tag = "TestTest"
# force use of the "write" backend (closes: #2401)
server.network-backend = "write"
# Loging
server.errorlog = "/var/log/lighttpd/error.log"
accesslog.filename = "/var/log/lighttpd/lighttpd.access.log"
accesslog.format = "In %t this host:%h open adress:%v%U %a"
#debug.log-request-handling = "enable"
#debug.log-ssl-noise = "enable"
## files to check for if .../ is requested
index-file.names = ( "index.html" )
## This include files
#include "/etc/lighttpd/sites/*.conf"
### Module CGI for LuCi
cgi.execute-x-only = "enable"
#$HTTP["url"] =~ "^/cgi-bin/" { cgi.assign = ( "" => "" ) }
#### auth module
## read authentification.txt for more info
auth.debug = 0
auth.backend = "htdigest"
auth.backend.htdigest.userfile = "/etc/lighttpd.user"
#auth.backend.plain.groupfile = "lighttpd.group"
auth.require = ( "" =>
("method" => "digest",
"realm" => "Need authorization",
"require" => "valid-user" ) )
$SERVER["socket"] == ":80" {
$HTTP["host"] =~ "^test\.example\.ru$" {
proxy.server = ( "" => ( "test.exmple.ru" => ( "host" => "192.168.0.101" ) ) )
}
accesslog.filename = "| grep -v -E '83.69.225.250|192.168.0.' >> /var/log/lighttpd/lighttpd.access.log"
#Redirect all to ssl(HTTPS)
$HTTP["host"] =~ "^www\.(.*)$" {
url.redirect = ( "^/(.*)" => "https://%1/$1" )
}
}
$SERVER["socket"] == ":443" {
### HTTPS enable
ssl.engine = "enable"
ssl.pemfile="/etc/lighttpd/cert/ssl.crt"
server.document-root = "/www/"
index-file.names = ( "index.html" )
$HTTP["url"] =~ "^/cgi-bin/" { cgi.assign = ( "" => "" ) }
accesslog.filename = "| grep -v -E '83.69.225.250|192.168.0.' >> /var/log/lighttpd/lighttpd.access.log"
$HTTP["host"] =~ "^test2\.example\.ru$" {
proxy.server = ( "" => ( "test2.example.ru" => ( "host" => "192.168.0.101" ) ) )
ssl.ca-file="/etc/lighttpd/cert/ca-certs.crt"
ssl.pemfile="/etc/lighttpd/cert/ssl.crt"
ssl.use-sslv3 = "enable"
ssl.use-sslv2 = "disable"
}
$HTTP["host"] =~ "^www\.(.*)$" {
url.redirect = ( "^/(.*)" => "https://%1/$1" )
ssl.ca-file="/etc/lighttpd/cert/ca-certs.crt"
ssl.pemfile="/etc/lighttpd/cert/ssl.crt"
ssl.use-sslv3 = "enable"
ssl.use-sslv2 = "disable"
}
}
mimetype.assign = (
".pdf" => "application/pdf",
".class" => "application/octet-stream",
".pac" => "application/x-ns-proxy-autoconfig",
".swf" => "application/x-shockwave-flash",
".wav" => "audio/x-wav",
".gif" => "image/gif",
".jpg" => "image/jpeg",
".jpeg" => "image/jpeg",
".png" => "image/png",
".svg" => "image/svg+xml",
".css" => "text/css",
".html" => "text/html",
".htm" => "text/html",
".js" => "text/javascript",
".txt" => "text/plain",
".dtd" => "text/xml",
".xml" => "text/xml"
)
#### compress module
compress.cache-dir = "/www/cache"
compress.allowed-encodings = ("bzip2", "gzip", "deflate")
compress.filetype = (
"text/plain",
"text/html",
"application/pdf",
"application/octet-stream",
"application/x-ns-proxy-autoconfig",
"application/x-shockwave-flash",
"audio/x-wav",
"image/gif",
"image/jpeg",
"image/jpeg",
"image/png",
"image/svg+xml",
"text/css",
"text/html",
"text/html",
"text/javascript",
"text/plain",
"text/xml",
"text/xml"
)
В чём собственно проблема:
1. При запросах
http://www.example.ru происходит редирект на
https://example.ru но браузер пишет веб страница недоступна(редирект происходит без запроса аутентификации).
Сервер запускается от root(увы но надо, чтобы скрипты cgi выполнялись от root), все файлы в директории /www/ имеют владельца и группу root и права.
2. При запросах
http://example.ru браузер пишет веб страница недоступна и ничего не происходит(даже запроса аутентификации).
3. Если в секции $SERVER["socket"] == ":443" не будет ssl.engine = "enable" ssl.pemfile="/etc/lighttpd/cert/ssl.crt" SSL не работает, так и должно быть?
4. Как сделать логи более подробными? А то сейчас там практически пусто.
Делаю для дома, для семьи, не для работы, а для обучения. Сертификаты бесплатные от startssl.com
Есть потребность в настройке именно этого веб-сервера. Проблема в том, что он взрывает мою логику. С удовольствием скурю на русском по regexp'aм в лайти годное руководство.