*squid [#e94cce81]
[[squid>+http://www.squid-cache.org/]]
LinuxにProxy環境を構築する為のソフトウェア。
WebProxy以外にも、設定次第ではFTPProxyやReverseProxy、RelayProxyとかも構築出来る。
#author("2020-03-14T20:56:02+09:00","default:nowsky","nowsky")
*HAProxy [#kb9ff150]
[[HAProxy>+http://www.haproxy.org/]]
L4レベルと、L7レベルでの負荷分散(ロードバランシング)に対応するフロントエンド。
HAProxy単体でパーシステンス(srcIP,cookie,etc...)も可能だし、重み付け分散も出来る。
システムを本気で冗長化したいが、金を掛けたくない場合には有効な手段の一つ。
ただし、HAProxyは負荷分散のみの為、完全冗長化をする為にはHeartBeatも組み込む必要がある。
システムに金をかけれる場合、F5のBIG-IPとかA10のThunderとかを使う必要がある。
~
*インストール [#p756a908]
*インストール [#yf53c6b8]
&size(16){&font(b){1. ビルド・インストール};};
事前に最新版のsquidをダウンロードしておく事。
オフィシャルにはLanguagePackもあるけれど、squid本体に同梱されているから別途ダウンロードする必要は無い。
./configureかける時に、普通はオプションとかを直接打ち込むのだが、
自分の場合後々流用したり編集したりする事が多いので、オプションだけ別ファイルにしておく。
 $ tar zxvf squid-3.3.9.tar.gz
 $ echo "--enable-default-err-language=Japanese --enable-err-languages=Japanese --enable-useragent-log --enable-referer-log --enable-linux-netfilter --enable-poll --enable-ssl --enable-large-cache-files --enable-coss-aio-ops --enable-storeio=ufs,aufs,diskd --enable-auth-modules=LDAP,PAM,SMB,MSNT --disable-internal-dns --disable-ident-lookups" > ./configure_option.opt
 $ cd squid-3.3.9
 $ ./configure `cat ../configure_option.opt`
 $ make
 $ make install
上記の設定だと、インストールディレクトリは『/usr/local/squid』になる。(“--prefix=***”で変更可能)
また、設定ファイルも『/usr/local/squid/etc』の中にあるsquid.confになる。(“--sysconfdir=***”で変更可能。普通だったら“--sysconfdir=/etc”とか)
オプションの詳細についてはドキュメントを読むか、下のサイト様に詳細が書いてある。
[[サーバ・クライアント設定集 - squidインストールと設定>+http://www.rose.sannet.ne.jp/nterasim/linux/squidinst.html]]
[[コロのLinuxサーバー構築 - Squidによるプロキシサーバーの構築>+http://linux.kororo.jp/cont/server/squid.php]]
事前に[[squid>Linux/Source/squid]]をインストールしておく事。
HAProxyは単純にmakeしてあげれば、ビルドとインストールまで出来るのだが、
今回はHAProxyのバージョン管理も行いたい為、Makefileを直接編集する。
 # tar zxvf haproxy-1.5.8.tar.gz
 # cd haproxy-1.5.8
 # cp Makefile Makefile-
 # sed -e "s/PREFIX = \/usr\/local/PREFIX = \/usr\/local\/haproxy-1.5.8/g" Makefile- > Makefile
 # diff Makefile- Makefile
     83c83
     < PREFIX = /usr/local
     ---
     > PREFIX = /usr/local/haproxy-1.5.8
~
&size(16){&font(b){2. 設定};};
squidの設定内容は説明書で7000行もあるので、必須な物を抜粋して記述していく。
併せて、squidの動作ログ、キャッシュデータ、ダンプを設置するディレクトリの作成と、動作ユーザーも作成する。
なお、上記ディレクトリはファイルの読み書きが頻繁に行われる為、&font(b){squidデータ専用のHDDを購入→squid専用パーティションとして作成した所を指定する事};
 $ groupadd squid
 $ useradd -g squid -s /sbin/nologin squid
 $ mkdir /var/squid
 $ cd /var/squid
 $ mkdir cache dump logs
 $ chown -R squid.squid /var/squid
 $ chmod -R 750 /var/squid
必要に応じて、/etc/passwdのhomeを書き換える事
 $ vi /usr/local/squid/etc/squid.conf
Makefileを編集したらビルド開始。下記で指定しているパラメータは以下参照。
 TARGET=Linuxのkernel。2.6.xxか3.xx.xxを使っている場合はlinux2628を指定する。
 CPU=サーバのCPU種類。面倒だったら"generic"と書けば大丈夫。SPARCを使っているなら"ultrasparc"と書く。
 ARCH=今回は未指定。CPUのアーキテクチャを指定したい場合に書く。i386やx86_64等を指定可能。書かなくてもmakeは通る。
 =====
 # echo "TARGET=linux2628 CPU=x86_64 USE_OPENSSL=1 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1" > make.option
 # make `cat ./make.option`
 # make install
~
上記の手動書き換えを行わない場合、make install時にインストール先を指定するやり方もある
 # make TARGET=linux2628 CPU=x86_64 USE_OPENSSL=1 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1
 # make PREFIX=/usr/local/haproxy-1.5.8 install
~
HAProxy v2.0.0以降はビルドオプションが変わり"linux2628"が削除された。
また、systemdへの最適化も行われているので次のオプションでビルドを行う。
 # echo "TARGET=linux-glibc USE_PCRE=1 USE_PCRE_JIT=1 USE_OPENSSL=1 USE_ZLIB=1 USE_LIBCRYPT=1 USE_SYSTEMD=1 USE_THREAD=1 USE_TFO=1" > make.option
 # make `cat ./make.option`
 # make PREFIX=/usr/local/haproxy-2.0.1 install

 #
 # Recommended minimum configuration:
 #
~
&size(16){&font(b){2. 設定ファイル};};
-参考サイト:[[HAProxyのACLとCriteria>+http://shimula.hatenablog.com/entry/20101017/1287277739]]

設定ファイルの作成と、起動に必要な情報も決めていく。
コンフィグのひな形はexamplesの中にシナリオが用意されているので、それをコピーしても稼働する。
今回は必要最低限に削減したコンフィグを自作する。
 # mkdir /var/run/haproxy
 # groupadd haproxy
 # useradd -g haproxy -d /var/run/haproxy -s /sbin/nologin haproxy
 # chown haproxy.haproxy /var/run/haproxy
 # chmod 755 /var/run/haproxy
 # cd /usr/local
 # ln -s /usr/local/haproxy-1.5.8 ./haproxy
 # cd /usr/sbin
 # ln -s /usr/local/haproxy/sbin/haproxy .

 # cp ${HAProxy_SRC}/examples/haproxy.init /etc/init.d/haproxy
 # chown root.root /etc/init.d/haproxy
 # chmod 755 /etc/init.d/haproxy

 # mkdir /etc/haproxy
 # vi /etc/haproxy/haproxy.cfg
 =====
 ## グローバルセクション
 global
     # デーモンとして動かす
     daemon
 
 # Example rule allowing access from your local networks.
 # Adapt to list your (internal) IP networks from where browsing
 # should be allowed
 acl localhost src 127.0.0.1/32 #squidサーバー自身
 acl localnet src 192.168.1.0/24 #ローカルネットワークアドレス
     # 起動させるHAProxyデーモンの数
     nbproc      2
 
 acl SSL_ports port 443 #SSL系統だけは別で設定
 #Safe_portsで指定されているポートは、squidを指定するだけで利用可能にする
 acl Safe_ports port 80 # http
 #acl Safe_ports port 21 # ftp
 acl Safe_ports port 443 # https
 #acl Safe_ports port 70 # gopher
 #acl Safe_ports port 210 # wais
 #acl Safe_ports port 1025-65535 # unregistered ports
 #acl Safe_ports port 280 # http-mgmt
 #acl Safe_ports port 488 # gss-http
 #acl Safe_ports port 591 # filemaker
 #acl Safe_ports port 777 # multiling http
 acl CONNECT method CONNECT
     # 最大コネクション数
     maxconn     4096
 
 #以下、http_accessとallow/denyを使用してフィルターをかける
 #
 # Recommended minimum Access Permission configuration:
 #
 # Deny requests to certain unsafe ports
 http_access deny !Safe_ports
 # Deny CONNECT to other than secure SSL ports
 http_access deny CONNECT !SSL_ports
     # HAProxyの実行ユーザ。UID指定も可能
     uid         haproxy
 
 # Only allow cachemgr access from localhost
 http_access allow localhost manager
 http_access deny manager
     # HAProxyの実行グループ。GID指定も可能
     gid         haproxy
 
 # We strongly recommend the following be uncommented to protect innocent
 # web applications running on the proxy server who think the only
 # one who can access services on "localhost" is a local user
 #http_access deny to_localhost
     # chroot機能を利用する時のDocumentRoot指定
     #chroot     /usr/share/haproxy
 
 #
 # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
 #
     # HAProxyの切り替わりログ。下記の場合、localhostのsyslogにfacility:local1でlevel:info以上を投げる
     #log        127.0.0.1 local1 info
 
 # Example rule allowing access from your local networks.
 # Adapt localnet in the ACL section to list your (internal) IP networks
 # from where browsing should be allowed
 http_access allow localnet
 http_access allow localhost
     # HAProxyのPID
     pidfile     /var/run/haproxy.pid
 
 # And finally deny all other access to this proxy
 http_access deny all
     # HAProxyの状態をWebベースで見れる様にする為のソケット。UIDとGIDは実行ユーザの物と合わせる
     stats socket  /var/run/haproxy/stats.sock uid 5001 gid 5001
 
 # Squid normally listens to port 3128
 http_port 8080 #待ち受けるポート番号
 
 # Uncomment and adjust the following to add a disk cache directory.
 cache_dir ufs /var/squid/cache 128 8 16
 #キャッシュデータの保存方法をufsにして、
 #親ディレクトリを8、親の中の子ディレクトリを16、子ディレクトリ内のキャッシュデータの最大サイズはそれぞれ128MByteにする
 cache_effective_user squid #キャッシュデータを書き込むユーザー
 cache_effective_group squid #キャッシュデータを書き込むユーザーのグループ
 cache_mem 1024 MB #使用するメモリプール
 ## デフォルトで適用されるパラメータの指定
 defaults
     # ロードバランシングのモード。TCPとHTTPが指定可能
     mode        http
 
 # Leave coredumps in the first cache dir
 #coredump_dir /usr/local/squid/var/cache/squid
 coredump_dir /var/squid/dump
     # ログの出力オプション。下記の場合、httplogとHealthCheckのログを出力する
     option      httplog
     option      dontlognull
     option      log-health-checks
 
 #
 # Add any of your own refresh_pattern entries above these.
 #
 #アクセスする度にリフレッシュ(再アクセス)するファイルの種類
 refresh_pattern ^ftp:       1440    20% 10080
 refresh_pattern ^gopher:    1440    0%  1440
 refresh_pattern -i (/cgi-bin/|\?) 0 0%  0
 refresh_pattern .       0   20% 4320
     # クライアントとのKeep-Aliveを維持しつつ、バックエンド接続はクローズする
     option      http-server-close
 
 # LOG
 access_log /var/squid/logs/access.log #クライアントがsquidにアクセスしてきたログ
 cache_log /var/squid/logs/cache.log #squiddの動作ログ
 cache_store_log /var/squid/logs/store.log #保存したキャッシュのログ
     # "Connection: close"ヘッダが無ければ付与してバックエンドに転送する
     #option     httpclose
 
 # Reply Host Message
 visible_hostname unknown #squidのDNS逆引き結果(unknownだと相手に逆引きを通知しない)
 forwarded_for off #プライベートIPを外に漏らさない
 #request_header_access Referer deny all #HTTPヘッダーのReferer(リンク元情報)を消す
 #request_header_access User-Agent deny all #HTTPヘッダーのUser-Agent(ブラウザ情報)を消す
 request_header_access Via deny all #squidの情報(バージョンとか)を外に漏らさない
 request_header_access Cache_Control deny all #キャッシュ制御情報を外に漏らさない
 request_header_access X-Forwarded-For deny all #クライアントのIPアドレスを通知しない
他にも、メモリキャッシュの容量、ログローテート設定とかをする必要があるが、今回は省略。
~
&size(16){&font(b){3. 起動準備};};
ソースからインストールすると、起動スクリプトとかも時前で用意する必要がある。
また、起動前にキャッシュフォルダの構成を作成したりする事も必要。
 //起動スクリプトを作る。必要に応じてランレベルからシンボリックリンクを張り、自動起動の設定もする。
 $ vi /etc/init.d/squidd
 ---
 #!/bin/sh
 #
 # squid           This shell script takes care of starting and stopping
 #                 squid (the Squid traffic proxy)
 #
 # chkconfig: 345 85 20
 # description: Squid is a proxy that network traffic on behalf of request
     # HAProxyを通過したパケットに、X-Forwarded-ForのHTTPヘッダを追加する
     option      forwardfor
 
 # ---------------------------- #
     # HAProxyのリトライパラメータ。下記の場合、接続を3回トライした後に4回目(最後)の接続で別バックエンドに投げる
     option      redispatch
     retries     3
 
 # Squid parameters.
 prefix="/usr/local/squid"
 exec_prefix="${prefix}/sbin/squid"
 pid_dir="/var/lock/subsys/squid"
 conf_dir="${prefix}/etc/squid.conf"
     # 最大コネクション数
     maxconn     2048
 
 # ---------------------------- #
     # ログの出力方式はglobalセクションの物を使用する。
     log         global
 
 # Load binary PATH.
 PATH=/bin:/sbin:/usr/bin:/usr/sbin:${prefix}/bin:${prefix}/sbin
 export PATH
     # HAProxyのコネクションタイムアウト。ms指定
     timeout connect 3000
     
     # HAProxyのクライアントとサーバのタイムアウト。デフォルトはms指定。clientとserverは同じ値にする
     timeout client  30s
     timeout server  30s
 
 # Source function library.
 . /etc/rc.d/init.d/functions
 
 # Source networking configuration.
 . /etc/sysconfig/network
 ## HAProxyのstatsページ。下記の場合、8888ポートでstatsページの表示を受け付ける。
 listen hastats 0.0.0.0:8888
     # statsページの出力モード。httpのみ
     mode        http
 
 # Check network startup status.
 [ ${NETWORKING} = "no" ] && exit 0
     # defaultsセクションの指定内容と同様
     maxconn         128
     timeout connect 3000
     timeout server  10000
     timeout client  10000
 
 # Check squid binary permission.
 [ -x ${exec_prefix} ] || exit 0
     # stats表示を有効にする
     stats enable
     stats show-legends
 
 # Check squid configuration presence.
 [ -f ${conf_dir} ] || exit 0
     # statsページのURL-PATHを指定する
     stats uri   /haproxy?hastats
 
 # ---------------------------- #
     # statsページのログインユーザ[User]とパスワード[Password]を指定する
     stats auth  User:Password
 
 case "$1" in
     start)
         echo -n "Starting squid: "
         ${exec_prefix} -NsY ${conf_dir} &
         RETVAL=$?
         [ ${RETVAL} -eq 0 ] && touch ${pid_dir}
     ;;
 
     stop)
         echo -n "Shutdown squid: "
         ${exec_prefix} -k shutdown &
         RETVAL=$?
         [ ${RETVAL} -eq 0 ] && rm -f ${pid_dir}
     ;;
 
     restart)
         stop && start
     ;;
 # --- Balancing proxy server --- #
 
     reload)
         echo -n "Reload squid: "
         ${exec_prefix} -k reconfigure
         exit $?
     ;;
 
     status)
         ${exec_prefix} -k check
         exit $?
     ;;
 
     *)
         echo "Usage: rc.squid {start|stop|restart|reload|status}"
         exit 1
     ;;
 esac
 ## HAProxyのフロントエンド指定。負荷分散先の振り分けルールを作成する。
 frontend all 0.0.0.0:8080
     # HTTPS接続時のポート番号を指定
     acl ssl_port url_end 443
 
 exit 0
参考サイト様 → [[サーバ・クライアント設定集 - squidインストールと設定>+http://www.rose.sannet.ne.jp/nterasim/linux/squidinst.html]]
     # 振り分けURLの指定。指定出来るパラメータは以下の通り
     # [url_beg -i "パラメータ"]の様に指定すると、複数指定が可能
     # ----------
     #     url      : URLの完全一致
     #     url_beg  : URLの先頭一致
     #     url_dir  : URLのディレクトリ一致
     #     url_dom  : HTTPリクエストのドメイン完全一致
     #     url_end  : URLの後方一致
     #     url_len  : URLの長さ一致
     #     url_reg  : 正規表現のマッチング
     #     url_sub  : URLを文字列として見た場合の一致
     # ----------
     #     if     "ACL_NAME1" "ACL_NAME2" "etc..."  : ACL_NAMEが全てtrueの場合
     #     unless "ACL_NAME1" "ACL_NAME2" "etc..."  : ACL_NAMEが全てfalseの場合(ifの逆)
     acl url_google url_dom    www.google.co.jp
     use_backend google        if url_google ssl_port
 
     # 個別の振り分け条件にマッチしなかった場合に使用するデフォルトバックエンド
     default_backend squid
 
 
 ## デフォルトのバックエンド指定
 backend squid
     # ロードバランサーの分散処理方式
     # ----------
     #     roundrobin                          : ラウンドロビン方式。weightパラメータ(分散先の重み付け[1~256])を使用可能。バックエンド復帰時のバランシングも可能
     #     static-rr                           : ラウンドロビン方式。weightパラメータ(分散先の重み付け[1~256])を使用可能。バックエンド復帰時のバランシング不可
     #     leastconn                           : 接続数が一番少ないサーバにコネクションを割り振る。負荷を均等にする場合に効果大
     #     source                              : srcIPを元に負荷分散。パーシステンスを効かせる場合には特に有効
     #     uri [len <length>] [depth <depth>]  : URIの"?"より前を元に負荷分散。参照するURIの長さも指定可能。リバースプロキシを作る時に使う程度
     balance roundrobin
 
     # HTTPヘッダ内のcookieにSERVERIDを付与する。これによってSERVERIDを元にしたcookieパーシステンスが出来る
     cookie SERVERID insert indirect nocache
 
     # 負荷分散先のバックエンドサーバを指定する
     # server "サーバ名" "IPアドレス:ポート番号" "オプション"
     # ----------
     #     cookie "NAME"  : HTTPリクエストのcookieに埋め込むパラメータの指定。ここに書いた名前がcookieに埋め込まれる為、ローカル名の指定は注意
     #     check          : バックエンドサーバHealthCheckを行う。デフォルトでは、2秒間隔にチェックを行う
     #     inter "NUM"    : 指定数毎にcheckを行う。単位はms
     #     fall "NUM"     : 指定数のチェックに失敗したら、最後に+1回のチェックを行った上で、他バックエンドサーバに処理を割り振る
     #     rise "NUM"     : 指定数のチェックに成功したら、他バックエンドサーバに割り振っていた処理を巻き取る
     #     backup         : バックエンドサーバをバックアップ用途で使用する。backup指定をすると、他バックエンドサーバが落ちない限り処理が割り振られない
     server proxy01.hogehoge.org 192.168.1.11:8008 cookie proxy01 check
     server proxy02.hogehoge.org 192.168.1.12:8008 cookie proxy02 check
 
 
 ## 個別バックエンド指定
 backend google
     balance roundrobin
     cookie SERVERID insert indirect nocache
     server proxy01.hogehoge.org 192.168.1.11:8008 cookie proxy01 check inter 1000 fall 2 rise 4
     server proxy02.hogehoge.org 192.168.1.12:8008 cookie proxy02 check backup
 
"stats socket"で指定した"/var/run/haproxy"はtmpfsの為、OSを再起動するとディレクトリの中身が空になりHAProxyが起動出来なくなる。
その為、initスクリプトに"/var/run/haproxy"のチェックとディレクトリ作成処理を追加しておく。
 # vi /etc/init.d/haproxy
 =====
   = [ -f /etc/$BASENAME/$BASENAME.cfg ] || exit 1
 
   + if [ ! -e /var/run/${BASENAME} ] ; then
   +     mkdir /var/run/${BASENAME}
   +     chown root.root /var/run/${BASENAME}
   +     chmod 750 /var/run/${BASENAME}
   + fi
 
   = RETVAL=0
 
OSがsystemdを採用している場合、ビルド時にsystemdフラグを有効化すると、
OSで"sd_notify()"関数をフックして起動制御する事が出来る。
 # vi /etc/systemd/system/multi-user.target.wants/haproxy.service
 ---
 [Unit]
 Description=HAProxy Load Balancer
 After=network.target
 
 [Service]
 Type=notify
 
 # Make sure /var/run/haproxy exists
 ExecStartPre=/usr/bin/install -d /var/run/haproxy -o haproxy -g haproxy
 ExecStartPre=/usr/local/haproxy/sbin/haproxy -f ${CONFIG} -c -q
 
 # Set environment variable
 PIDFile=/var/run/haproxy.pid
 EnvironmentFile=-/etc/default/haproxy
 EnvironmentFile=-/etc/sysconfig/haproxy
 Environment="CONFIG=/etc/haproxy/haproxy.cfg" "PIDFILE=/var/run/haproxy.pid"
 
 ExecStart=/usr/local/haproxy/sbin/haproxy -Ws -f ${CONFIG} -p ${PIDFILE}
 ExecStop=/bin/kill -USR1 $MAINPID
 ExecReload=/usr/local/haproxy/sbin/haproxy -f ${CONFIG} -c -q
 ExecReload=/bin/kill -USR2 $MAINPID
 
 KillMode=mixed
 Restart=always
 SuccessExitStatus=143
 LimitNOFILE=65535
 LimitNPROC=65535
 StartLimitBurst=0
 
 [Install]
 WantedBy=multi-user.target

 //設定ファイルの整合性チェック。エラーが出たら設定ファイルを見直す
 $ /usr/local/squid/sbin/squid -k parse
~
&size(16){&font(b){3. 起動方法};};
設定ファイルを作成したら、起動スクリプトを叩いてみる。
また、必要に応じてログローテートの設定も作成する。
 #起動
 # /etc/init.d/haproxy start
 
 //キャッシュディレクトリ内のサブディレクトリを設定通りに作る
 $ /usr/local/squid/sbin/squid -z
 #停止
 # /etc/init.d/haproxy stop
 
 //squidを起動する
 $ /etc/init.d/squidd start
 #コンフィグの再読込
 # /etc/init.d/haproxy reload
~
&size(16){&font(b){4. HAProxyのstats表示};};
HAProxyの動作状況を確認するには、コンフィグで書いたstatsURLへ接続する必要がある。
上記の通りに設定している場合、&font(b){"http://[HAProxyのサーバアドレス]:8888/haproxy?hastats"};でアクセス出来る。
また、ユーザ名とパスワードを指定している場合、このタイミングでパスワード等を入力する必要がある。
正常に稼働している場合、下記のような画面が表示される(下のは実際にns-lab BBで動作しているHAProxyのステータス)
&ref(haproxy_stats.png,left,nowrap,30%);
~
&size(16){&font(b){5. ロードバランシングパケットの転送};};
[[HAProxyとSquid(HAProxyの上位Proxy)を同じサーバで稼働させる>+http://www.ns-lab.org/digiloog/2014/12/article_2814/]]時にはパケット転送(折り返し)が発生する為、
ip_forwardをenableにする必要がある。
 ・起動中のサーバでip_forwardをenableにする
 # echo 1 > /proc/sys/net/ipv4/ip_forward
 
 //squidを停止する
 $ /etc/init.d/squidd stop
 =====
 ・永続的にip_forwardをenableにする
 # vi /etc/sysctl.conf
     < net.ipv4.ip_forward=0
     ---
     > net.ipv4.ip_forward=1
 
 //squidの動作確認
 $ /usr/local/squid/bin/squidclient -p 8080 http://www.yahoo.co.jp/
 =====
 ・/etc/sysctl.confが無い場合は、/etc/rc.d/rc.localに下記を直書きする
 echo 1 > /proc/sys/net/ipv4/ip_forward
~
&size(16){&font(b){6. フロントエンドのSSL化};};
-[[HAProxy+Ubuntu14.04>+http://qiita.com/akito1986/items/8cf5d54bb3081e7391e9]]
-[[HAProxyのconfigサンプル>+http://moruho.cocolog-nifty.com/blog/2014/08/haproxyconfig-5.html]]
-[[リバースプロキシ配下のWordPressでHTTPS>+https://e-td.xyz/article/reverse-proxy-with-wordpress-https/]]

HAProxyではWebアクセスフロントエンドとしてSSL待ち受けが出来るようになった。
ただし、WordPressの様にアプリケーションでHTTP/HTTPSを判定する場合、
ブラウザのSSL混在コンテンツエラーに注意する。
 ## グローバルセクション
 global
     # X-Forwarded-ForのHTTPヘッダを追加する
     option                       forwardfor
     
     # 証明書の検証を無効化。自己証明書を利用する場合は必須
     ssl-server-verify            none
     
     # SSL POODLE脆弱性対応
     ssl-default-bind-options     no-sslv3 no-tls-tickets
     
     # SSL Cipher Suiteの限定化
     ssl-default-bind-ciphers     EECDH+HIGH:EDH+HIGH:HIGH:MEDIUM:+3DES:!ADH:!RC4:!MD5:!aNULL:!eNULL:!SSLv3:!SSLv2:!LOW:!EXP
     
     # 暗号化強度のデフォルト値
     tune.ssl.default-dh-param    2048
 
 ## HAProxyのHTTPSフロントエンド設定
 frontend https
     # HTTPSの待ち受け設定。crtの指定にはssl-default-bind-optionsと同じオプションも個別追加出来る
     # "crt"はファイル指定とディレクトリ指定が可能。ディレクトリ指定時はディレクトリ配下を全てincludeする動作となる。
     # "crt"で指定したディレクトリの中には、公開鍵・秘密鍵を下記の様に纏めたファイルを設置する
     # ----------
     #     -----BEGIN CERTIFICATE-----
     #     MIIEGTCC.....
     #     .............
     #     .............
     #     -----END CERTIFICATE-----
     #     -----BEGIN RSA PRIVATE KEY-----
     #     MIIEowIB.....
     #     .............
     #     .............
     #     -----END RSA PRIVATE KEY-----
     # ----------
     bind            0.0.0.0:443   ssl               crt /etc/ssl/certs/haproxy.pem
 
     # X-Forwardedヘッダーに、SSL通信の値を追加する
     http-request    set-header    X-Forwarded-Proto  https
     http-request    set-header    X-Forwarded-Port   %[dst_port]
     http-request    set-header    X-Forwarded-Host   %[req.hdr(Host)]
     
     # HTTPSバックエンドサーバの振り分けルール
     acl             hoge-dst      hdr_dom(host) -i   www.hogehoge.org
     acl             hoge-port     dst_port           443
     use_backend     hoge-back     if                 hoge-dst hoge-port
 
 backend hoge-back
     # SourceHashで負荷分散を行う
     balance source
     
     # ssl         : バックエンドサーバにSSL(HTTPS)でアクセス
     # verify none : 証明書検証を明示的に無効化。自己証明書を利用する場合は必須
     server www1.hogehoge.org 192.168.1.11:443 check ssl verify none
     server www2.hogehoge.org 192.168.1.12:443 check ssl verify none
 
バックエンドがWordPressの場合、SSL混在エラーの出る場合がある。
エラーが出た場合は、wp-config.phpに下記設定を追加する
 if((empty($_SERVER['HTTP_X_FORWARDED_HOST'])  == false)){
     $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
 }
 if((empty($_SERVER['HTTP_X_FORWARDED_FOR'])   == false)){
     $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
 }
 if((empty($_SERVER['HTTP_X_FORWARDED_PROTO']) == false) && ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')){
     $_SERVER['HTTPS'] = 'on';
 }