poundでHTTPS通信を行う(SSLラッパ)

poundで可能な事はHTTP通信の負荷分散だけではなく、SSLラッパとして稼働させることで、HTTPS通信を受け取りバックエンドのサーバにHTTP通信でリクエストを行うことも可能です。

 

下記の内容でpound自体の設定は完了していると仮定し話を進めます。
もし、未設定の場合には下記の記事を参考に設定してください。
GMOクラウド publicの設定 10日目

 

poundの準備が完了したら、証明書を準備します。
※作り方の詳細については、「自己(オレオレ)証明書の作成」の記事から証明書を作成して下さい。

 

必要なファイルが揃ったら下記の順番でファイルを1つにまとめます。

cat server.crt server.key server.cer > server.pem

 

それぞれのファイルについては下記を参考にしてください。

  • server.crt:発行されたサーバ証明書
  • server.key:秘密鍵(パスワードを外した状態)
  • server.cer:中間証明書

 

ファイルの準備が完了したら、稼働しているpoundの設定に下記の内容を追記します。

ListenHTTPS
    Address xxx.xxx.xxx.xxx
    Port    443
    xHTTP   0

    Cert "/usr/local/cert/server.pem"

    AddHeader "X-Forwarded-Proto: https"
    AddHeader "X-Forwarded-By: SSL"
    AddHeader "X-Forwarded-Host: SSL"
    HeadRemove "X-Forwarded-Proto"
    HeadRemove "X-Forwarded-By"
    HeadRemove "X-Forwarded-Host"

    #
    # www.example.com
    #
    Service
        HeadRequire "Host: .*www.example.com"

        BackEnd
            Address  yyy.yyy.yyy.yyy
            Port     80
            Priority 2
        End
    End
End

 

ListenHTTPS > Address には、外部IPアドレスを設定します。
ListenHTTPS > Service > BackEnd > Address には、内部IPアドレス(WebサーバのIPアドレス)を設定します。
※BackEndが複数ある場合には、BackEnd部分を複数記述することで複数のサーバへ処理を分ける事が可能です。

 

注意点
気が付く方もいるかもしれませんが、poundとWebサーバ間はHTTPS通信ではなくHTTP通信となります。
一般的にPHPなどでは、HTTPS通信かを判別するために「Port番号」を利用している物もありますが、この場合には利用できません。

関連する記事

記事へのコメント (1 件)

  1. yteraoka より:

    Pound の同一 Listeners 内で AddHeader は複数回使えないみたいです。

コメントを残しませんか?