SSL proxy на lighttpd

Возникла необходимость сделать на lighttpd балансирующий ssl-прокси к веб-серверу под управлением Apache.

<a href="http://www.linuxetc.ru/?p=20" class="forlinuxetc">(Оригинал написан для linuxetc.ru)</a> Возникла необходимость сделать на lighttpd балансирующий ssl-прокси к веб-серверу под управлением Apache. Другими словами, реализовать схему:

<pre>
https-запрос
|
\\|/
lighttpd
/ \\
/ \\
apache1 apache2
</pre>

где apache1. apache2 выбираются, исходя из доступности.

Так как задача отняла чуть больше времени и сил, чем ожидалось, приведу решение с небольшим комментарием:

<!--break-->

Выдержка из /etc/lighttpd/lighttpd.conf:

<blockquote>
server.modules = (
"mod_redirect",
"mod_access",
"mod_proxy",
"mod_accesslog" )

$SERVER["socket"] == "11.22.33.44:443" {
ssl.engine = "enable"
ssl.pemfile = "/etc/lighttpd/server.pem"
proxy.balance = "fair"
proxy.server = ( "" => (( "host" => "10.10.0.15",
"port" => 80 ),
( "host" => "10.10.0.115",
"port" => 80 )
))
} else $HTTP["host"] == "ssl-site.ru" {
url.redirect = (
"^/(.*)" => "https://ssl-site.ru/$1"
)
}

</blockquote>

Как видим, апачи "за сценой" (на 10.10.0.15 и 10.10.0.115) работают на 80-ом порту, а вся https-часть возложена на lighttpd, принимающий запрос на 443-й порт на заданном ip.

Ключевым здесь является то, что https-часть определяется как $SERVER["socket"], а не $HTTP["host"], как принято в lighttpd при описании виртуальных хостов. В https, как известно, на одном ip может быть только один ssl-сертификат, что и описывает приведённый кусок конфига.

В описании же для http://ssl-site.ru содержится только редирект на https, и более ничего.

Add new comment

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.