haproxy는 loadbalancing 기능 이외에도 다양한 기능이 많습니다.
/admin을 내부 아이피만 허용하는 경우는 아래처럼 할 수 있습니다.
acl is-internal-net src 172.16.0.0/12 192.168.0.0/16 10.0.0.0/8
acl is-admin url_beg /admin
block if !is-internal-net is-admin
http를 https로 redirect하는 것도 haproxy에서 사용할 수 있죠.
redirect scheme https if !{ ssl_fc }
haproxy가 ssl offload 기능을 제공하기에 backend에는 http만 사용합니다. 그리고 밑의 application에서 https에서 온 request라는 것을 확인하기 위해서 x-forwarded-protocol을 붙여줍니다.
bind 0.0.0.0:443 ssl crt <your-certificate-file>
acl is-ssl dst_port 443
reqadd x-forwarded-protocol:\ https if is-ssl
종합하면 아래처럼 되겠습니다.
listen webapp
bind 0.0.0.0:443 ssl crt <your-certificate-file>
server server1 10.10.10.10:80 check
server server1 10.10.10.11:80 check
acl is-internal-net src 172.16.0.0/12 192.168.0.0/16 10.0.0.0/8
acl is-admin url_beg /admin
acl is-ssl dst_port 443
block if !is-internal-net is-admin
redirect scheme https if !{ ssl_fc }
reqadd x-forwarded-protocol:\ https if is-ssl