開発者ドキュメント

Ubuntu14.04でHAProxyを使用してSSLターミネーションを実装する方法

序章

高可用性プロキシの略であるHAProxyは、Linux、Solaris、およびFreeBSDで実行できる人気のあるオープンソースソフトウェアTCP/HTTPロードバランサーおよびプロキシソリューションです。 その最も一般的な用途は、ワークロードを複数のサーバーに分散することにより、サーバー環境のパフォーマンスと信頼性を向上させることです(例: Web、アプリケーション、データベース)。 GitHub、Imgur、Instagram、Twitterなど、多くの注目を集める環境で使用されています。

このチュートリアルでは、SSLターミネーション、トラフィック暗号化、およびWebサーバーの負荷分散にHAProxyを使用する方法について説明します。 また、HAProxyを使用してHTTPトラフィックをHTTPSにリダイレクトする方法も示します。

ネイティブSSLサポートは、2014年6月に安定バージョンとしてリリースされたHAProxy1.5.xに実装されました。

前提条件

このチュートリアルを完了するには、次のものを持っているか、入手する必要があります。

SSL証明書と秘密鍵のペアをまだお持ちでない場合は、続行する前に入手してください。 SSL証明書の作成をカバーする手順を含むいくつかのチュートリアルを次に示します。

結合されたPEMSSL証明書/キーファイルの作成

HAProxyを使用してSSLターミネーションを実装するには、SSL証明書とキーのペアが適切な形式であるPEMであることを確認する必要があります。 ほとんどの場合、SSL証明書(認証局から提供された.crtまたは.cerファイル)とそれぞれの秘密鍵(ユーザーが生成した.keyファイル)を単純に組み合わせることができます。 証明書ファイルの名前がexample.com.crtで、秘密鍵ファイルの名前がexample.com.keyであるとすると、ファイルを組み合わせる方法の例を次に示します。

cat example.com.crt example.com.key > example.com.pem
sudo cp example.com.pem /etc/ssl/private/

これにより、example.com.pemと呼ばれる結合されたPEMファイルが作成され、/etc/ssl/privateにコピーされます。 いつものように、PEMファイル(秘密鍵を含む)を含む秘密鍵ファイルのコピーを必ず保護してください。

場合によっては、CAルート証明書とCA中間証明書をPEMファイルにコピーする必要があります。

私たちの開始環境

これが私たちが始めている環境です:

WebサーバーでSSLを既に使用している場合や、別のデータベースサーバーを使用している場合など、環境が例と異なる場合は、このチュートリアルを環境に合わせて調整できるはずです。

レイヤー7の負荷分散、バックエンド、ACLなど、基本的な負荷分散の概念や用語に慣れていない場合は、基本を説明する記事をご覧ください:HAProxyと負荷分散の概念の概要

私たちの目標

このチュートリアルの終わりまでに、次のような環境が必要になります。

つまり、ユーザーはHTTPS経由でHAProxyサーバーに接続することでWebサイトにアクセスします。これにより、SSLセッションが復号化され、暗号化されていない要求がWebサーバーに転送されます(つまり、 www-backendのサーバー)ポート80のプライベートネットワークインターフェイスを介して。 次に、Webサーバーは応答をHAProxyサーバーに送信します。これにより、応答が暗号化され、元の要求を行ったユーザーに返送されます。

www-backend は、同じコンテンツを提供する限り、必要な数のWebサーバーでセットアップできます。 つまり、これを1台のサーバーでセットアップし、後で必要な数のサーバーを追加してスケールアウトすることができます。 トラフィックが増加すると、ユーザートラフィックを処理するのに十分なシステムリソースがない場合、HAProxyサーバーがパフォーマンスのボトルネックになる可能性があることに注意してください。

注:このチュートリアルでは、Web /アプリケーションサーバーが同じコンテンツを提供するようにする方法については説明していません。これは、多くの場合、アプリケーションまたはWebサーバーに依存しているためです。

HAProxy1.6.xをインストールします

プライベートネットワークで新しいVPSを作成します。 このチュートリアルでは、 haproxy-www と呼びますが、好きなように呼ぶことができます。

haproxy-www VPSで、専用のPPAをapt-getに追加します。

sudo add-apt-repository ppa:vbernat/haproxy-1.6

次に、aptキャッシュを更新します。

sudo apt-get update

次に、次のコマンドを使用してapt-getを使用してHAProxy1.6をインストールします。

sudo apt-get install haproxy

HAProxy 1.6がインストールされたので、設定しましょう!

HAProxyの設定

HAProxyの設定ファイルは/etc/haproxy/haproxy.cfgにあり、2つの主要なセクションに分かれています。

繰り返しになりますが、HAProxyまたは基本的な負荷分散の概念と用語に慣れていない場合は、次のリンクを参照してください:HAProxyと負荷分散の概念の概要

HAProxy構成:グローバル

すべてのHAProxy設定は、HAProxy VPS、haproxy-wwwで行う必要があります。

エディターでhaproxy.cfgを開きます。

sudo vi /etc/haproxy/haproxy.cfg

globaldefaultsの2つのセクションがすでに定義されていることがわかります。

最初に実行したいのは、maxconnを適切な数に設定することです。 この設定は、HAProxyが許可する同時接続の数に影響します。これにより、QoSに影響を与え、Webサーバーがクラッシュしてあまりにも多くの要求を処理しようとするのを防ぐことができます。 あなたの環境に何がうまくいくかを見つけるためにそれをいじくり回す必要があるでしょう。 構成のglobalセクションに次の行を(妥当と思われる値で)追加します

   maxconn 2048

生成される一時DHEキーの最大サイズを構成するには、次の行を追加します。

   tune.ssl.default-dh-param 2048

次に、 defaults セクションで、mode httpという行の下に次の行を追加します。

   option forwardfor
   option http-server-close

forwardfor オプションは、各リクエストにX-Forwarded-Forヘッダーを追加するようにHAProxyを設定し、 http-server-close オプションは、接続を閉じながら維持を維持することで、HAProxyとユーザー間の遅延を減らします-生きています。

HAProxy構成:統計

HAProxy統計を使用すると、HAProxyが着信トラフィックをどのように処理しているかを判断するのに役立ちます。 HAProxy統計ページを有効にする場合は、デフォルトセクションに次の行を追加します(ユーザーとパスワードを安全な値に置き換えます)。

   stats enable
   stats uri /stats
   stats realm Haproxy\ Statistics
   stats auth user:password

これにより、/statsのドメインに移動して、HAProxy統計ページを確認できます(例: https://example.com/stats )。

まだ設定ファイルを閉じないでください! 次にプロキシ設定を追加します。

HAProxy構成:プロキシ

フロントエンド構成

最初に追加したいのは、着信HTTP接続を処理するためのフロントエンドです。 ファイルの最後に、www-httpというフロントエンドを追加しましょう。 必ずhaproxy_www_public_IPをhaproxyのpublicIPに置き換えてください-wwwVPS:

frontend www-http
   bind haproxy_www_public_IP:80
   reqadd X-Forwarded-Proto:\ http
   default_backend www-backend

上記のフロントエンド設定スニペットの各行の意味は次のとおりです。

次に、着信HTTPS接続を処理するためのフロントエンドを追加します。 ファイルの最後に、www-httpsというフロントエンドを追加しましょう。 必ずhaproxy_www_public_IPをhaproxyのpublicIPに置き換えてください-wwwVPS:

frontend www-https
   bind haproxy_www_public_IP:443 ssl crt /etc/ssl/private/example.com.pem
   reqadd X-Forwarded-Proto:\ https
   default_backend www-backend

バックエンド構成

フロントエンドの構成が完了したら、次の行を追加してバックエンドを追加し続けます。 強調表示された単語を、WebサーバーのそれぞれのプライベートIPアドレスに置き換えてください。

backend www-backend
   redirect scheme https if !{ ssl_fc }
   server www-1 www_1_private_IP:80 check
   server www-2 www_2_private_IP:80 check

上記のバックエンド構成スニペットの各行の意味は次のとおりです。

ここで、haproxy.cfgを保存して終了します。 これでHAProxyを開始する準備ができましたが、最初にロギングを有効にしましょう。

HAProxyログを有効にする

HAProxyでのロギングの有効化は非常に簡単です。 まず、rsyslog.confファイルを編集します。

sudo vi /etc/rsyslog.conf

次に、次の2行を見つけ、コメントを外してUDPsyslog受信を有効にします。 完了すると、次のようになります。

$ModLoad imudp
$UDPServerRun 514
$UDPServerAddress 127.0.0.1

次に、rsyslogを再起動して、新しい構成を有効にします。

sudo service rsyslog restart

HAProxyログが有効になりました! HAProxyが起動すると、ログファイルが/var/log/haproxy.logに作成されます。

HAProxyを起動します

haproxy-www で、HAProxyを起動して、構成の変更を有効にします。

sudo service haproxy restart

HAProxyは、SSLターミネーションとWebサーバーの負荷分散を実行しています。 これで、負荷分散サーバーに、ロードバランサーのパブリックIPアドレスまたはドメイン名haproxyを介してユーザーがアクセスできるようになりました-www! すべてが正しく設定されていることを確認するために、確認したいことがいくつかあります。

確認事項

注: WordPressのように独自のURLを知る必要のあるアプリケーションを使用している場合は、URL設定を「http」から「https」に変更する必要があります。 WordPressの例に従うには、WordPressの一般設定に移動し、WordPressアドレス(URL)とサイトアドレス(URL)を「http」から「https」に変更します。

結論

これで、SSL接続を処理し、サーバー環境を水平方向にスケールアウトするために使用できるロードバランサーソリューションができました。 このガイドで学んだことを他のHAProxyガイドと自由に組み合わせて、環境をさらに改善してください。

モバイルバージョンを終了