概要
オープンソースソフトウェアのHAProxyを利用したプロキシサーバを構築したので備忘録として作業内容を残してみました。本構成は、クラスタソフトを使用せずにプロキシサーバを2重化し、後続のWebサーバへの負荷分散を実現しています。
※HAProxyとは:オープンソースソフトウェアの高可用性、負荷分散を実現するためのソフトウェアです。 高パフォーマンスと安定性のあるTCP通信やHTTP通信の負荷分散や、Proxyサーバ機能を提供しています。
構成
以下の環境で構成します。
環境
・Client:Windows
・ブラウザ:InternetExplorer(以下IEとします)
・Proxy:【OS】Linux、【Software】HAProxy、Squid
・WebServer:【OS】Linux、【Software】Apache
要件
・WebServerへのアクセスはプロキシサーバ経由とします
・通常はWebServer01のWebWerviceへアクセスし、WebServer01の障害時にWebServer02のWebService接続を切り替えます
アクセスフロー
以下に今回の構成を示します。
※OSやSoftwareのインストール手順等は省力します。
1、ClientからProxyへのアクセス
ClientにはWindows系OS、ブラウザはIEを使用し、ブラウザで指定するプロキシ設定を端末によって変更することでClientからアクセスするプロキシサーバを分散させています。分散については、IEのPACファイルを指定してランダムにプロキシ設定をさせます。これによりClientから見たプロキシサーバは2重化されています。
以下にPACファイルのサンプルを記載します。
1 2 3 4 5 6 7 8 9 10 11 |
function FindProxyForURL(url, host) { // For Proxy // ----------- var proxyForList = []; proxyForList[0] ="PROXY proxyserver01:8080 ; PROXY proxyserver02:8080"; proxyForiList[1] ="PROXY proxyserver02:8080 ; PROXY proxyserver01:8080"; var usingProxyForIndex = Math.floor( Math.random() * proxyForList.length ) ; var usingProxyFor = proxyForList[usingProxyForIndex]; return usingProxyFor; } |
※プロキシ設定を2台のどちらかをランダムに設定
2、ProxyからWebServerへのアクセス
プロキシサーバでは、Squidをフォワードプロキシとして導入し、そこからリバースプロキシとしてのHAProxyに連携し、WebServerへとリダイレクトさせています。
※Squid:クライアントとサーバの通信を中継するプロキシサーバソフト。リバースプロキシやキャッシュサーバとしても利用されています。本構成ではデフォルトの設定で稼動させます。
以下に/etc/haproxy/haproxy.confファイルのサンプルを記載します。
1 2 3 4 5 6 7 8 9 10 11 12 |
frontend redirect-front bind *:443 ssl crt /etc/haproxy/server.pem no-sslv3 reqadd X-Forwarded-Proto:\ https reqadd X-Forwarded-Port:\ 443 stats enable default_backend web-backend backend web-backend option httpchk GET /healthcheck http-check expect string OK server webserver01 inter 3000 check server webserver02 |
※ヘルスチェックへのアクセス結果がOKと返ってくればWebServer01 へ転送します。また、OK以外結果になればWebServer02へ転送させます。
課題
本構成としては、ProxyサーバにHAProxyとSquidの構成で実現させているが、HAProxy単体でもフォワードプロキシとしての機能も備えています。今回は検証する時間がなくこの構成をとりましたが、よりシンプルな構成として、以下のようにHAProxyだけの構成で構築できればと考えています。
最後に
クラウド環境が普及していく中で、アプリケーションサーバを設置する前段として、リバースプロキシやロードバランサーを設置する構成はよく見られるため、こういったプロキシサーバの構築のニーズは少なくないと考えています。その中でHAProxyは高パフォーマンスで機能も豊富なため選択肢としては良いのではないでしょうか。まだまだ豊富な機能を使いこなせていません。もっといろいろなことを試していきたいと思います。
執筆者プロフィール

- tdi iDC&セキュリティ推進部
-
入社以来、インフラの技術支援などを担当。その後、客先常駐業務がほとんどでようやく社内での業務に復帰。
新しい業務の担当にもなり、いろいろなことにチャレンジしたいと考えています。
この執筆者の最新記事
iDC&セキュリティ2022.12.26Deep Instinctの端末管理をREST APIで効率化する
ITコラム2018.12.17HAProxyを使用したプロキシサーバを構築してみた