■ 設定項目
  
   :
      # http_port 3128
  http_port 8080 # ---proxyの待ち受けポート番号 
        :
      #Default:
      # cache_mem 8 MB
  cache_mem 32 MB # ---実メモリを考えて設定する
        :
  # ACL list
# acl localnet src 10.0.0.0/8   # RFC1918 possible internal network
# acl localnet src 172.16.0.0/12        # RFC1918 possible internal network
# acl localnet src 192.168.0.0/16       # RFC1918 possible internal network
  acl localnet src 192.168.10.0/24 # My Localnetwork ----- Proxyへのアクセスを利用許可するサブネット
  acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines
  acl SSL_ports port 443 
    :
  # 
  acl MyServers dstdomain example.jp # internal Network cache ignore --- 自分のサーバのキャッシュをしないためのACL
  acl has-xff req_header X-Forwarded-For ^(([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)|(\[([0-9a-f]+)?:([0-9a-f:]+)?:([0-9a-f]+|0-9\.]+)?\])) # --- X-Forwarded-For 情報の有無判定用ACL
    :
  # no cache
  cache deny MyServers # --- 自分のサーバはキャッシュしない
    :
  # ローカルネットワークからのアクセスにはX-Forwarded-forヘッダを受け付ける
  # follow_x_forwarded_for allow localhost
  follow_x_forwarded_for allow localnet # --- 
    :
  
  # Only allow cachemgr access from localhost
      http_access allow manager localhost
      http_access deny manager
  http_access allow localhost # --- localhostからのアクセスを許可
  http_access allow localnet # ---ローカルネットワークからのアクセスを許可/行の順番に意味があるので必ずこの行へ記述すること 
  
# And finally deny all other access to this proxy
  http_access deny all
  
    :
      #Default:
      # forwarded_for on
  forwarded_for off # ---接続相手にローカルIPを渡さない為の設定
    :
  #cache_dir ufs /var/spool/squid 100 16 256
  cache_dir ufs /var/spool/squid 1000 16 256 # --- キャッシュ用ディスクサイズを指定
    :
  # Cache Memory Area size
  cache_mem 2048 MB # ---メモリキャッシュサイズ指定(自分の持っている物理メモリの 50%としました。)
    :
  # maximum Cache size on memory.
  maximum_object_size_in_memory 2048 KB # ---メモリキャッシュできるオブジェクトの最大サイズを指定(2MB以上のオブジェクトはキャッシュしない)
    :
  # maximum file object size
  maximum_object_size 20 MB # ファイルキャッシュ対象はは20MB以内のオブジェクトとする
  :
  # Log format (default formats available)
#logformat squid      %ts.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<a %mt
#logformat common     %>a %[ui %[un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st %Ss:%Sh
#logformat combined   %>a %[ui %[un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh
#logformat referrer   %ts.%03tu %>a %{Referer}>h %ru
#logformat useragent  %>a [%tl] "%{User-Agent}>h"
  #logformat squid-xff %ts.%03tu %6tr %{X-Forwarded-For}>h %Ss/%03>Hs
  %<st %rm %ru %[un %Sh/%<a %mt
  # 
  # SquidへのアクセスはHAProxy経由で行なわれるので、Squidのアクセスログはアクセス元のIPアドレスとしてHAProxyのアドレスを記録してしまい、
  # クライアントPCのIPアドレスが記録されなくなる。 これの対策として、ログへの記録としてX-Forwarded-forヘッダ情報を記録させるようにする。#
  LOGフォーマットとして、"combined"を基に通常のソースIPの代わりにX-Forwarded-forヘッダ情報出力する新たな"combined-xff"というフォーマットを定義する
  
  logformat combined-xff %{X-Forwarded-For}>h %[ui %[un [%tl] "%rm
  %ru HTTP/%rv" %>Hs %<st "%{Referer}>h" "%{User-Agent}>h"
  %Ss:%Sh
  
  # ローカルネットワークからのアクセスの場合には“combined-xff”形式、それ以外には”combine”形式でSyslogへ出力する
# access log output place.
# access_log udp://172.16.6.104:514 squid
  access_log syslog:local5.info combined !has-xff
  access_log syslog:local5.info combined-xff has-xff
  
  # X-Forwarded-Forヘッダー情報を上位のサーバには渡さない(アクセス元のローカルIPを隠ぺい)する。
  forwarded_for off
  
  # Squidエラー画面を日本語にする
  error_default_language ja
  
  # ホスト名だけのURLでのアクセスの場合に、ドメイン名を付加する。
  dns_defnames on
  append_domain .example.jp
  
  # Squidのホスト名を明示的に宣言(古いバージョンのSquidでは必要だったが、現在は設定しなくても良い)
  # node-1 or node-2 or node-3 をそれぞれ設定する。
  visible_hostname node-1.example.jp
  
squidのAccessログはNode-1~3までのそれぞれのサーバで発生するします。そこで後で集計する場合などにぞれぞれのファイルをマージする処理を避けるために、Accessログをrsyslogを実行しているサーバに集約させるようにSquidを上記で設定しています。
rsyslogサーバでは/etc/rsyslog.confで次の設定を行います。
      :
  $ModLoad imudp
  $UDPServerRun 514 # --- 514/udp ポートでsyslogを待ち受ける(なお、従来必要だったコマンドでの"-r"オプションは現在のrsyslogでは不要)
     :
  #  *.info;mail.none;authpriv.none;cron.none /var/log/messages
  *.info;mail.none;authpriv.none;cron.none;local5.none /var/log/messages # --- local5.noneのメッセージを/var/log/messagesに記録させないように対象除外とする。
     :
  # ログのフォーマットのテンプレートとして、メッセージの先頭1文字を除外した "t-squid"という形式を設定
  # これはsyslogで送られてきたSquidのAccessログの先頭に1スペース勝手に補完されてしまう事への対策
  # Save proxy log messages also to squid access.log
  $template  t-squid,"%msg:2:$%\n" 
  
  local5.* /var/log/squid/r_access.log;t-squid # --- local5.* レベルのsyslogを /var/log/squid/r_access.log ファイルに出力。その際の出力フォーマットは
  t-squid とする。
    
  
 
HAProxyでは、フロントエンドであるHAProxyがクライアントPCからの待ち受けをし、バックエンドにある3台のSquidサーバへロードバランシングを行うようにする。 ロードバランスの方式として単純なラウンドロビンで行ってしまうと、SSLセッションの維持ができなくなる可能性が高いので、バランシング方式はソースIPアドレスを使ったハッシュバランス方式とする。
/etc/haproxy/haproxy.cfg を以下のように設定する。
  #---------------------------------------------------------------------
  # Global settings
  # グローバル設定では、システムに影響する全体的な設定を行います。
#---------------------------------------------------------------------
global
        log         127.0.0.1 local2
        chroot      /var/lib/haproxy
        pidfile     /var/run/haproxy.pid
       maxconn 30000 # --- 最大接続セッション数を指定
       user haproxy
        group       haproxy
        daemon
        # turn on stats unix socket
        stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
  # use if not designated in their block
  # デフォルト設定は、この後に設定する各'listen'や'backend'といったセクションの
  # デフォルト値を設定します。
#---------------------------------------------------------------------
defaults
       mode http # --- モードはhttp(パケット)モードとします。
       log global
        option                  httplog
        option                  dontlognull
        option http-server-close
        option forwardfor       except 127.0.0.0/8
        option                  redispatch
        retries                 3
        timeout http-request    10s
        timeout queue           1m
        timeout connect         10s
        timeout client          1m
        timeout server          1m
        timeout http-keep-alive 10s
        timeout check           10s
       maxconn 10000 # --- 同時接続セッション数です。グローバルで指定した数を超えないようにします。
#---------------------------------------------------------------------
  # main frontend which proxys to the backends
  # フロントエンド(待ち受け)に関するセクションです。
#---------------------------------------------------------------------
  frontend haproxy # --- 'haproxy'という名前でフロントエンドを定義します。
       bind 0.0.0.0:8080 # --- 待ち受けポートは、8080とします。
       bind :::8080 # --- IPv6の待ち受けポートは、8080とします。
  
       # acl url_static path_beg -i /static /images /javascript
  /stylesheets
        # acl url_static   path_end       -i .jpg .gif .png .css .js
          # use_backend static          if url_static
       option http-keep-alive #
       option httpclose
       maxconn 8000
       option httpclose
       option forwardfor # --- X-Forwarded-for ヘッダを処理します。
       default_backend back_proxy # --- 'back_proxy'として定義したバックエンドにパケットを渡します。
       timeout client 30s #
  
       # これ以外の設定は、デフォルト設定に従います。
  
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
  # backend static
  #     balance roundrobin
  #     server static 127.0.0.1:4331 check
#---------------------------------------------------------------------
  # round robin balancing between the various backends
  # バックエンドとして、フロントエンドで受け取ったパケットを転送する相手の情報を
  # 設定します。
#---------------------------------------------------------------------
  backend back_proxy # --- 'back_proxy'という名前でバックエンドを定義します。
       fullconn 10000 # --- バックエンドで処理する最大接続数
       mode http
       # balance roundrobin
       balance source # --- ソースIPを基にしたバランシングを行います。
       # 
       # stickiness
       stick-table type ip size 100k expire 30m
       stick on src
       # timer
       timeout connect 30s
       timeout server 30s
       http-reuse safe # HTTP/2 connection
       #
       option forwardfor 
  
       # 以下は、転送先の相手の情報です。 バックエンドは死活監視します。
       # これ以外の設定は、デフォルト設定に従います。
       server proxy1 192.168.10.21:8080 check inter 1000 maxconn 3000 # --- maxconnは各サーバで処理する接続数。指定しない場合には fullconn の範囲で自動調整される
       server proxy2 192.168.10.22:8080 check inter 1000 maxconn 3000
       server proxy3 192.168.10.23:8080 check inter 1000 maxconn 3000
  
#---------------------------------------------------------------------
  # ステータス情報表示用Webページを表示させるための設定
  # アクセスは
  #     http://HAProxyのIPアドレス:8888
  #     ログインID: admin
  #     パスワード: P@ssword
#---------------------------------------------------------------------
  listen stats
              bind :8888
       bind :::8888 # ----- IPv6の受信ポート
       mode http
              maxconn 10
              stats enable
              # stats hide-versionsystemc
              stats refresh 10s
              stats show-node
       stats auth admin:P@ssword
              stats uri /