Commit 21606c0b authored by JooHan Hong's avatar JooHan Hong

haproxy 구성 업데이트

parent 46acf640
Pipeline #6056 passed with stages
in 1 minute and 36 seconds
...@@ -2,14 +2,20 @@ ...@@ -2,14 +2,20 @@
# HA-Proxy를 이용한 Load Balancer 운용 # HA-Proxy를 이용한 Load Balancer 운용
> Front-End에서 운용되는 www.hongsnet.net 서비스의 Load Balancer의 구성내역을 살펴본다. > Front-End에서 운용되는 각종 서비스의 Load Balancer의 구성내역을 살펴본다.
# 서비스 구성 # 서비스 구성
- www.hongsnet.net Backend (Round-Robin 분산 알고리즘) - 공통: Round-Robin 분산 알고리즘 사용 (Default Value)
- edu.hongsnetnet Backend (Round-Robin 분산 알고리즘) - LDAP
- SSL Redirection (Backend의 경우 80만 Listen) - InfluxDB
- www.hongsnet.net
- newsystem.hongsnet.net
- edu.hongsnet.net
- monitor.hongsnet.net
- django-api.hongsnet.net
- working.hongsnet.net
## 구성 내역 ## 구성 내역
...@@ -19,12 +25,26 @@ ...@@ -19,12 +25,26 @@
# cat haproxy.cfg |grep -v '#' # cat haproxy.cfg |grep -v '#'
global global
daemon daemon
# 연결할 수 있는 최대 connection 을 지정한다. 이걸 안하면 기본값이 2000 으로 설정된다.
maxconn 8192 maxconn 8192
user haproxy
# haproxy 프로세스를 구동할 user(gid/uid를 지정할 수도 있다.)
user root
# ssl 을 구성할 때 key size를 지정한다.
tune.ssl.default-dh-param 2048 tune.ssl.default-dh-param 2048
log 127.0.0.1 local0
# haproxy는 로그를 남기기 위해서 file io 를 직접 처리하지 않는다. rsyslog 로 UDP 전송을 한다.
log /dev/log local0
log /dev/log local1 notice
# ciphers 설정
ssl-default-bind-ciphers ECDH+AESGCM:ECDH+AES128:ECDH+AES256:DH+AES128:DH+AES256:DH+CAMELLIA128:DH+CAMELLIA256:DH+SEEDCBC:RSA:!aNULL:!MD5:!eNULL:!RC4 ssl-default-bind-ciphers ECDH+AESGCM:ECDH+AES128:ECDH+AES256:DH+AES128:DH+AES256:DH+CAMELLIA128:DH+CAMELLIA256:DH+SEEDCBC:RSA:!aNULL:!MD5:!eNULL:!RC4
stats socket /var/run/haproxy/info.sock mode 666 level user
#소켓을 활성화한다.
#stats socket /var/run/haproxy/info.sock mode 666 level user
#stats timeout 2m
cache web_cache cache web_cache
total-max-size 1024 # MB total-max-size 1024 # MB
...@@ -32,73 +52,94 @@ cache web_cache ...@@ -32,73 +52,94 @@ cache web_cache
max-age 180 # seconds max-age 180 # seconds
defaults defaults
log global log global
mode http # mode is inherited by sections that follow
option httplog clf #mode tcp
option dontlognull mode http
option dontlog-normal option http-server-close
option forwardfor option forwardfor
option http-server-close option accept-invalid-http-request
timeout http-request 10s timeout http-request 10s
timeout client 20s timeout client 20s
timeout connect 10s timeout connect 10s
timeout server 30s timeout server 30s
timeout http-keep-alive 10s timeout http-keep-alive 10s
option accept-invalid-http-request
listen stats listen stats
bind :9000 # Listen on localhost:9000 mode http
bind 0.0.0.0:9000 # Listen on localhost:9000
stats enable # Enable stats page stats enable # Enable stats page
stats realm Haproxy\ Statistics # Title text for popup window stats realm Haproxy\ Statistics # Title text for popup window
stats uri /haproxy_stats # Stats URI stats uri /haproxy_stats # Stats URI
stats auth admin:패스워드 stats auth admin:패스워드
frontend hongs frontend ldap
# receives traffic from clients
bind :389
default_backend ldap_server
bind *:80 backend ldap_server
bind *:443 ssl crt /etc/haproxy/certs/hongs.pem # relays the client messages to servers
server ldap1 172.16.0.247:389 check fall 2 rise 1
server ldap2 172.24.0.240:389 check fall 2 rise 1
http-response set-header Cache-Control web_cache,\ max-age="600" frontend influxdb
http-request deny if deny_useragent bind :8086
default_backend influxdb_server
compression algo gzip backend influxdb_server
compression type text/plain application/json application/xml # relays the client messages to servers
server influxdb-slave1 172.16.0.189:8086 check fall 2 rise 1
server influsdb-slave2 172.24.0.251:8086 check fall 2 rise 1
acl deny_useragent hdr_sub(user-agent) -i -f /etc/haproxy/deny_useragent.list frontend monitor_dev
acl private-network src 127.0.0.0/8 bind :80
acl private-network src 172.24.0.0/16 bind *:443 ssl crt /etc/haproxy/certs/hongs.pem
acl private-network src 192.168.200.0/24
monitor-uri /monitor # monitor-dev.hongsnet.net
monitor fail if !private-network acl is_monitor_dev_web hdr_end(host) -i monitor-dev.hongsnet.net
use_backend monitor_dev_web if is_monitor_dev_web
capture request header Host len 128 # django-api.hongsnet.net
capture request header User-Agent len 64 acl is_django_api_web hdr_end(host) -i django-api.hongsnet.net
capture request header Referrer len 64 use_backend django_api_web if is_django_api_web
log-format "%ci\ [%trl]\ %HM\ \"%HU\"\ \"%HV\"\ %ST\ %B\ %hr\ %s\ %b\ %TR/%Tw/%Tc/%Tr/%Ta\ %ac/%fc/%bc/%sc/%rc" # working.hongsnet.net
acl is_django_working_web hdr_end(host) -i working.hongsnet.net
use_backend django_working_web if is_django_working_web
# www.hongsnet.net
acl is_www_hongsnet_net hdr_end(host) -i www.hongsnet.net acl is_www_hongsnet_net hdr_end(host) -i www.hongsnet.net
use_backend www_hongsnet_net if is_www_hongsnet_net use_backend www_hongsnet_net if is_www_hongsnet_net
# hongsnet.net
acl is_www_hongsnet_net hdr_end(host) -i hongsnet.net
use_backend www_hongsnet_net if is_www_hongsnet_net
# edu.hongsnet.net
acl is_edu_hongsnet_net hdr_end(host) -i edu.hongsnet.net acl is_edu_hongsnet_net hdr_end(host) -i edu.hongsnet.net
use_backend edu_hongsnet_net if is_edu_hongsnet_net use_backend edu_hongsnet_net if is_edu_hongsnet_net
# newsystem.hongsnet.net
acl is_newsystem_hongsnet_net hdr_end(host) -i newsystem.hongsnet.net acl is_newsystem_hongsnet_net hdr_end(host) -i newsystem.hongsnet.net
use_backend newsystem_hongsnet_net if is_newsystem_hongsnet_net use_backend newsystem_hongsnet_net if is_newsystem_hongsnet_net
# edu.example.com
acl is_edu_example_com hdr_end(host) -i edu.example.com acl is_edu_example_com hdr_end(host) -i edu.example.com
use_backend edu_example_com if is_edu_example_com use_backend edu_example_com if is_edu_example_com
acl is_study_hongsnet_net hdr_end(host) -i study.hongsnet.net #default_backend monitor_dev_web
use_backend study_hongsnet_net if is_study_hongsnet_net
acl is_hongsnet_net hdr_end(host) -i hongsnet.net backend monitor_dev_web
use_backend hongsnet_net if is_hongsnet_net # relays the client messages to servers
option httpchk
http-check send meth GET uri /login
server tb3 172.16.0.253:32000 check fall 2 rise 1
server tb3-docker 172.16.0.251:32000 check fall 2 rise 1
backend www_hongsnet_net backend django_api_web
# relays the client messages to servers
# 에러 파일 설정 # 에러 파일 설정
errorfile 400 /etc/haproxy/errors/400.http errorfile 400 /etc/haproxy/errors/400.http
...@@ -109,110 +150,95 @@ backend www_hongsnet_net ...@@ -109,110 +150,95 @@ backend www_hongsnet_net
errorfile 503 /etc/haproxy/errors/503.http errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http errorfile 504 /etc/haproxy/errors/504.http
http-request cache-use web_cache option httpchk
http-response cache-store web_cache http-check send meth GET uri /
server tb2 172.24.252:32090 check fall 2 rise 1
http-request set-src src server tb3 172.24.253:32090 check fall 2 rise 1
server tb3-docker 172.24.0.251:32090 check fall 2 rise 1
#Redirect if HTTPS is *not* used, 강제 https 리디렉션, 평시운영 시
redirect scheme https code 301 if !{ ssl_fc } backend django_working_web
# relays the client messages to servers
option httpchk
http-check send meth GET uri /
server tb2 172.24.0.252:32091 check fall 2 rise 1
server tb3 172.16.0.253:32091 check fall 2 rise 1
server tb3-docker 172.16.0.251:32091 check fall 2 rise 1
frontend monitor_nodejs
bind :8081
bind *:4438 ssl crt /etc/haproxy/certs/hongs.pem
default_backend monitor_nodejs_api
backend monitor_nodejs_api
# relays the client messages to servers
option httpchk
http-check send meth GET uri /version
server tb3 172.16.0.253:32001 check fall 2 rise 1
server tb3-docker 172.16.0.251:32001 check fall 2 rise 1
frontend monitor_nodejs_db
bind :8900
default_backend monitor_nodejs_db_server
backend monitor_nodejs_db_server
# relays the client messages to servers
option httpchk
http-check send meth GET uri /status
server tb3 172.16.0.253:32002 check fall 2 rise 1
server tb3-docker 172.16.0.251:32002 check fall 2 rise 1
server tb2.hongsnet.net 172.24.0.151:30000 check fall 3 rise 2 backend www_hongsnet_net
server tb3.hongsnet.net 172.16.0.158:30000 check fall 3 rise 2 # relays the client messages to servers
option httpchk
http-check send meth GET uri /
server tb2 172.24.0.252:30000 check fall 2 rise 1
server tb3 172.16.0.253:30000 check fall 2 rise 1
server tb3-docker 172.16.0.251:30000 check fall 2 rise 1
backend edu_hongsnet_net backend edu_hongsnet_net
# relays the client messages to servers
# 에러 파일 설정 option httpchk
errorfile 400 /etc/haproxy/errors/400.http http-check send meth GET uri /
errorfile 403 /etc/haproxy/errors/403.http server tb2 172.24.0.252:30000 check fall 2 rise 1
errorfile 408 /etc/haproxy/errors/408.http server tb3 172.16.0.253:30000 check fall 2 rise 1
errorfile 500 /etc/haproxy/errors/500.http server tb3-docker 172.16.0.251:30000 check fall 2 rise 1
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
http-request cache-use web_cache
http-response cache-store web_cache
http-request set-src src
# Redirect if HTTPS is *not* used, 강제 https 리디렉션
redirect scheme https code 301 if !{ ssl_fc }
server tb2.hongsnet.net 172.24.0.151:30000 cookie tb2 check fall 3 rise 2
server tb3.hongsnet.net 172.16.0.158:30000 cookie tb3 check fall 3 rise 2
server tb3-docker.hongsnet.net 172.16.0.251:30000 cookie tb3-docker check fall 3 rise 2
backend edu_example_com
# 에러 파일 설정
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
http-request set-src src
# Redirect if HTTPS is *not* used, 강제 https 리디렉션
redirect scheme https code 301 if !{ ssl_fc }
server tb2.hongsnet.net 172.24.0.151:30000 cookie tb2 check fall 3 rise 2
server tb3.hongsnet.net 172.16.0.158:30000 cookie tb3 check fall 3 rise 2
server tb3-docker.hongsnet.net 172.16.0.251:30000 cookie tb3-docker check fall 3 rise 2
backend newsystem_hongsnet_net backend newsystem_hongsnet_net
# relays the client messages to servers
option httpchk
http-check send meth GET uri /
server tb2 172.24.0.252:30000 check fall 2 rise 1
server tb3 172.16.0.253:30000 check fall 2 rise 1
server tb3-docker 172.16.0.251:30000 check fall 2 rise 1
# 에러 파일 설정 backend edu_example_com
errorfile 400 /etc/haproxy/errors/400.http # relays the client messages to servers
errorfile 403 /etc/haproxy/errors/403.http option httpchk
errorfile 408 /etc/haproxy/errors/408.http http-check send meth GET uri /
errorfile 500 /etc/haproxy/errors/500.http server tb2 172.24.0.252:30000 check fall 2 rise 1
errorfile 502 /etc/haproxy/errors/502.http server tb3 172.16.0.253:30000 check fall 2 rise 1
errorfile 503 /etc/haproxy/errors/503.http server tb3-docker 172.16.0.251:30000 check fall 2 rise 1
errorfile 504 /etc/haproxy/errors/504.http
http-request set-src src
# Redirect if HTTPS is *not* used, 강제 https 리디렉션
redirect scheme https code 301 if !{ ssl_fc }
server tb2.hongsnet.net 172.24.0.151:30000 check fall 3 rise 2
server tb3.hongsnet.net 172.16.0.158:30000 check fall 3 rise 2
server tb3-docker.hongsnet.net 172.16.0.251:30000 check fall 3 rise 2
backend study_hongsnet_net backend study_hongsnet_net
# relays the client messages to servers
# 에러 파일 설정 option httpchk
errorfile 400 /etc/haproxy/errors/400.http http-check send meth GET uri /
errorfile 403 /etc/haproxy/errors/403.http server tb2 172.24.0.252:30000 check fall 2 rise 1
errorfile 408 /etc/haproxy/errors/408.http server tb3 172.16.0.253:30000 check fall 2 rise 1
errorfile 500 /etc/haproxy/errors/500.http server tb3-docker 172.16.0.251:30000 check fall 2 rise 1
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
http-request set-src src
# Redirect if HTTPS is *not* used, 강제 https 리디렉션
redirect scheme https code 301 if !{ ssl_fc }
server tb2.hongsnet.net 172.24.0.151:30000 cookie tb2 check fall 3 rise 2
server tb3.hongsnet.net 172.16.0.158:30000 cookie tb3 check fall 3 rise 2
server tb3-docker.hongsnet.net 172.16.0.251:30000 cookie tb3-docker check fall 3 rise 2
``` ```
## 주요설정 내역 ## 주요설정 내역
- **SSL Redirection** - **Mode**
```bash ```bash
redirect scheme https code 301 if !{ ssl_fc } mode http
``` ```
> http 프로토콜을 지원하도록 설정한다.
- X-Forwarded-For Add Header - X-Forwarded-For Add Header
```bash ```bash
...@@ -220,18 +246,7 @@ option forwardfor ...@@ -220,18 +246,7 @@ option forwardfor
``` ```
> request를 서버로 보낼 때 Backend에서는 HA-Proxy의 IP가 로그가 기록된다. 따라서 이 옵션을 추가하면 실제 클라이언트의 IP주소가 기록된다. > request를 서버로 보낼 때 Backend에서는 HA-Proxy의 IP가 로그가 기록된다. 따라서 이 옵션을 추가하면 실제 클라이언트의 IP주소가 기록된다.
- **Session Reuse**
```bash
option http-server-close
```
> 기본적으로 HAProxy는 접속유지 관점에서 keep-alive 모드로 동작을 하는데, 각각의 커넥션은 request와 reponse를 처리하고나서, 새로운 request을 받기까지 connection idle 상태(유휴상태)로 양쪽이 연결되어 있다. "option http-server-close" 는 클라이언트 사이드에서 HTTP keep-alive를 유지하고 파이프라이닝을 지원하면서 서버 사이드에 커넥션을 닫는 형태를 설정한다. 이는 클라이언트 사이드에서 최저 수준의 응답지연을 제공하고, Server-Side에서 리소스를 재활용할 수 있게 되어 **backend 에서 빠르게 세션을 재사용할 수 있도록** 해준다.
- **Unicode Accept**
```bash
option accept-invalid-http-request
```
> 이 설정을 적용하지않으면, URI에 한글 등의 유니코드가 호출될 경우 400에러가 발생한다.
- **ACL 설정** - **ACL 설정**
```bash ```bash
acl is_www_hongsnet_net hdr_end(host) -i www.hongsnet.net acl is_www_hongsnet_net hdr_end(host) -i www.hongsnet.net
...@@ -239,14 +254,15 @@ use_backend www_hongsnet_net if is_www_hongsnet_net ...@@ -239,14 +254,15 @@ use_backend www_hongsnet_net if is_www_hongsnet_net
``` ```
> 요청되는 호스트의 URI에 www.hongsnet.net 이 검출되면, is_www_hongsnet_net으로 설정하고, 이 설정은 www_hongsnet_net의 **Backend**로 라우팅되도록 설정한다. > 요청되는 호스트의 URI에 www.hongsnet.net 이 검출되면, is_www_hongsnet_net으로 설정하고, 이 설정은 www_hongsnet_net의 **Backend**로 라우팅되도록 설정한다.
- **Back-end 설정** - **Back-end 설정**
```bash ```bash
server tb2.hongsnet.net 172.24.0.151:30000 check fall 3 rise 2 server tb2.hongsnet.net 172.24.0.151:30000 fall 2 rise 1
server tb3.hongsnet.net 172.16.0.158:30000 check fall 3 rise 2 server tb3.hongsnet.net 172.16.0.158:30000 fall 2 rise 1
server tb3-docker.hongsnet.net 172.16.0.251:30000 check fall 3 rise 2 server tb3-docker.hongsnet.net 172.16.0.251:30000 fall 2 rise 1
``` ```
> 연결할 Back-end 서버들의 리스트다. 3번 health check가 실패하면 down으로 판단되고, 2번 성공하면 다시 Load Balancer 대상에 포함시킨다. 그리고 backup의 경우 서버점검 시 사용한다. > 연결할 Back-end 서버들의 리스트다. 2번 health check가 실패하면 down으로 판단되고, 1번 성공하면 다시 Load Balancer 대상에 포함시킨다. 그리고 backup의 경우 서버점검 시 사용한다.
> **30000**번 포트는 `K8s의 NodePort 설정으로 외부에 노출되는 서비스 포트` 이다. > **30000**번 포트는 `K8s의 NodePort 설정으로 외부에 노출되는 서비스 포트` 이다.
[![logo](https://www.hongsnet.net/images/logo.gif)](https://www.hongsnet.net)
# HA-Proxy를 이용한 Load Balancer 운용
> Front-End에서 운용되는 www.hongsnet.net 서비스의 Load Balancer의 구성내역을 살펴본다.
# 서비스 구성
- www.hongsnet.net Backend (Round-Robin 분산 알고리즘)
- edu.hongsnetnet Backend (Round-Robin 분산 알고리즘)
- SSL Redirection (Backend의 경우 80만 Listen)
## 구성 내역
- **haproxy.cfg 설정 내역**
```bash
# cat haproxy.cfg |grep -v '#'
global
daemon
maxconn 8192
user haproxy
tune.ssl.default-dh-param 2048
log 127.0.0.1 local0
ssl-default-bind-ciphers ECDH+AESGCM:ECDH+AES128:ECDH+AES256:DH+AES128:DH+AES256:DH+CAMELLIA128:DH+CAMELLIA256:DH+SEEDCBC:RSA:!aNULL:!MD5:!eNULL:!RC4
stats socket /var/run/haproxy/info.sock mode 666 level user
cache web_cache
total-max-size 1024 # MB
max-object-size 10000 # bytes
max-age 180 # seconds
defaults
log global
mode http
option httplog clf
option dontlognull
option dontlog-normal
option forwardfor
option http-server-close
timeout http-request 10s
timeout client 20s
timeout connect 10s
timeout server 30s
timeout http-keep-alive 10s
option accept-invalid-http-request
listen stats
bind :9000 # Listen on localhost:9000
stats enable # Enable stats page
stats realm Haproxy\ Statistics # Title text for popup window
stats uri /haproxy_stats # Stats URI
stats auth admin:패스워드
frontend hongs
bind *:80
bind *:443 ssl crt /etc/haproxy/certs/hongs.pem
http-response set-header Cache-Control web_cache,\ max-age="600"
http-request deny if deny_useragent
compression algo gzip
compression type text/plain application/json application/xml
acl deny_useragent hdr_sub(user-agent) -i -f /etc/haproxy/deny_useragent.list
acl private-network src 127.0.0.0/8
acl private-network src 172.24.0.0/16
acl private-network src 192.168.200.0/24
monitor-uri /monitor
monitor fail if !private-network
capture request header Host len 128
capture request header User-Agent len 64
capture request header Referrer len 64
log-format "%ci\ [%trl]\ %HM\ \"%HU\"\ \"%HV\"\ %ST\ %B\ %hr\ %s\ %b\ %TR/%Tw/%Tc/%Tr/%Ta\ %ac/%fc/%bc/%sc/%rc"
acl is_www_hongsnet_net hdr_end(host) -i www.hongsnet.net
use_backend www_hongsnet_net if is_www_hongsnet_net
acl is_edu_hongsnet_net hdr_end(host) -i edu.hongsnet.net
use_backend edu_hongsnet_net if is_edu_hongsnet_net
acl is_newsystem_hongsnet_net hdr_end(host) -i newsystem.hongsnet.net
use_backend newsystem_hongsnet_net if is_newsystem_hongsnet_net
acl is_edu_example_com hdr_end(host) -i edu.example.com
use_backend edu_example_com if is_edu_example_com
acl is_study_hongsnet_net hdr_end(host) -i study.hongsnet.net
use_backend study_hongsnet_net if is_study_hongsnet_net
acl is_hongsnet_net hdr_end(host) -i hongsnet.net
use_backend hongsnet_net if is_hongsnet_net
backend www_hongsnet_net
# 에러 파일 설정
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
http-request cache-use web_cache
http-response cache-store web_cache
http-request set-src src
#Redirect if HTTPS is *not* used, 강제 https 리디렉션, 평시운영 시
redirect scheme https code 301 if !{ ssl_fc }
server tb2.hongsnet.net 172.24.0.151:30000 check fall 3 rise 2
server tb3.hongsnet.net 172.16.0.158:30000 check fall 3 rise 2
backend edu_hongsnet_net
# 에러 파일 설정
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
http-request cache-use web_cache
http-response cache-store web_cache
http-request set-src src
# Redirect if HTTPS is *not* used, 강제 https 리디렉션
redirect scheme https code 301 if !{ ssl_fc }
server tb2.hongsnet.net 172.24.0.151:30000 cookie tb2 check fall 3 rise 2
server tb3.hongsnet.net 172.16.0.158:30000 cookie tb3 check fall 3 rise 2
server tb3-docker.hongsnet.net 172.16.0.251:30000 cookie tb3-docker check fall 3 rise 2
backend edu_example_com
# 에러 파일 설정
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
http-request set-src src
# Redirect if HTTPS is *not* used, 강제 https 리디렉션
redirect scheme https code 301 if !{ ssl_fc }
server tb2.hongsnet.net 172.24.0.151:30000 cookie tb2 check fall 3 rise 2
server tb3.hongsnet.net 172.16.0.158:30000 cookie tb3 check fall 3 rise 2
server tb3-docker.hongsnet.net 172.16.0.251:30000 cookie tb3-docker check fall 3 rise 2
backend newsystem_hongsnet_net
# 에러 파일 설정
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
http-request set-src src
# Redirect if HTTPS is *not* used, 강제 https 리디렉션
redirect scheme https code 301 if !{ ssl_fc }
server tb2.hongsnet.net 172.24.0.151:30000 check fall 3 rise 2
server tb3.hongsnet.net 172.16.0.158:30000 check fall 3 rise 2
server tb3-docker.hongsnet.net 172.16.0.251:30000 check fall 3 rise 2
backend study_hongsnet_net
# 에러 파일 설정
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
http-request set-src src
# Redirect if HTTPS is *not* used, 강제 https 리디렉션
redirect scheme https code 301 if !{ ssl_fc }
server tb2.hongsnet.net 172.24.0.151:30000 cookie tb2 check fall 3 rise 2
server tb3.hongsnet.net 172.16.0.158:30000 cookie tb3 check fall 3 rise 2
server tb3-docker.hongsnet.net 172.16.0.251:30000 cookie tb3-docker check fall 3 rise 2
```
## 주요설정 내역
- **SSL Redirection**
```bash
redirect scheme https code 301 if !{ ssl_fc }
```
- X-Forwarded-For Add Header
```bash
option forwardfor
```
> request를 서버로 보낼 때 Backend에서는 HA-Proxy의 IP가 로그가 기록된다. 따라서 이 옵션을 추가하면 실제 클라이언트의 IP주소가 기록된다.
- **Session Reuse**
```bash
option http-server-close
```
> 기본적으로 HAProxy는 접속유지 관점에서 keep-alive 모드로 동작을 하는데, 각각의 커넥션은 request와 reponse를 처리하고나서, 새로운 request을 받기까지 connection idle 상태(유휴상태)로 양쪽이 연결되어 있다. "option http-server-close" 는 클라이언트 사이드에서 HTTP keep-alive를 유지하고 파이프라이닝을 지원하면서 서버 사이드에 커넥션을 닫는 형태를 설정한다. 이는 클라이언트 사이드에서 최저 수준의 응답지연을 제공하고, Server-Side에서 리소스를 재활용할 수 있게 되어 **backend 에서 빠르게 세션을 재사용할 수 있도록** 해준다.
- **Unicode Accept**
```bash
option accept-invalid-http-request
```
> 이 설정을 적용하지않으면, URI에 한글 등의 유니코드가 호출될 경우 400에러가 발생한다.
- **ACL 설정**
```bash
acl is_www_hongsnet_net hdr_end(host) -i www.hongsnet.net
use_backend www_hongsnet_net if is_www_hongsnet_net
```
> 요청되는 호스트의 URI에 www.hongsnet.net 이 검출되면, is_www_hongsnet_net으로 설정하고, 이 설정은 www_hongsnet_net의 **Backend**로 라우팅되도록 설정한다.
- **Back-end 설정**
```bash
server tb2.hongsnet.net 172.24.0.151:30000 check fall 3 rise 2
server tb3.hongsnet.net 172.16.0.158:30000 check fall 3 rise 2
server tb3-docker.hongsnet.net 172.16.0.251:30000 check fall 3 rise 2
```
> 연결할 Back-end 서버들의 리스트다. 3번 health check가 실패하면 down으로 판단되고, 2번 성공하면 다시 Load Balancer 대상에 포함시킨다. 그리고 backup의 경우 서버점검 시 사용한다.
> **30000**번 포트는 `K8s의 NodePort 설정으로 외부에 노출되는 서비스 포트` 이다.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment