アシアルブログ

アシアルの中の人が技術と想いのたけをつづるブログです

リバースプロキシでSSL証明書のコスト削減!

こんにちは、岡本です。
lighttpdSSL・リバースプロキシを立ててみました。

最近ではSSL証明書も安価になりましたが、複数のサイトを運営する場合、個別にSSLを取得するとお金も設定にかかる人件費も馬鹿になりません。
そこで、リバースプロキシを導入しSSLの処理を一つのサーバに集約する構成を作りました。

※注意:SSL認証局によっては、このような利用が禁止されている場合があります。
契約内容を確認の上、ご検討ください。

接続イメージは以下のような感じです。



SSL証明書example.comの分だけ取得すればOKです。
SSLの時だけドメインが変わってしまいますが…


■今回の設定(追記してください!)
SSL証明書の取得
今回は省略。
@ITの記事を参考にテスト用のSSL証明書を作成しました。
Webサーバ「lighttpd」でSSLを使うには

●クライアントパソコン(Windows XPの場合)
C:\WINDOWS\system32\drivers\etc


192.168.1.157 example.com
192.168.1.157 1.example.com
192.168.1.157 2.example.com
192.168.1.157 3.example.com


lighttpd
/etc/lighttpd/lighttpd.conf


$SERVER["socket"] == "xxx.xxx.xxx.xxx:443" {
  ssl.engine                  = "enable"
  ssl.pemfile                = "/etc/lighttpd/ssl/server.pem"
  url.rewrite-once = ( "^/([^//]+)/(.+)" => "http://$1.example.com/$2")
}

proxy.server = (
                  "" =>
                       ( ( 
                           "host" => "xxx.xxx.xxx.xxx",
                           "port" => "81"
                         ) ),
               )


SSLの時だけmod_rewriteでアクセス先のURLを書き換えています。
ウェブサーバに接続するときも、書き換えたURLでアクセスが行われます。

Apache
/etc/httpd/conf/httpd.conf


Listen 81
NameVirtualHost *:81
<VirtualHost *:81>
  ServerName example.com
  DocumentRoot /data/example
</VirtualHost>
<VirtualHost *:81>
  ServerName 1.example.com
  DocumentRoot /data/example_1
</VirtualHost>
<VirtualHost *:81>
  ServerName 2.example.com
  DocumentRoot /data/example_2
</VirtualHost>
<VirtualHost *:81>
  ServerName 3.example.com
  DocumentRoot /data/example_3
</VirtualHost>

ブラウザからウェブサーバへの通信ポートである80番ポートはリバースプロキシが使うため、Apacheは別のポートを使ってリバースプロキシからの通信を待つことにします。