먼저 두 가지가 단순히 수 있도록, 쉽게 만 허용 목록에있는 IP
acl whitelist src 10.12.12.23
use_backend SOMESERVER if whitelist
세 번째 - 스로틀 - 사용하는 데 필요한 stick-tables (많은 데이터 유형이있다 - 카운터 코네티컷, SESS, HTTP, 속도 카운터와 같은 요금 ...) :
# max entries count request in 60s periods
stick-table type ip size 200k expire 100s store http_req_rate(60s)
다음 당신은 tracking each request 예에 의해, 테이블을 채우기해야합니다. 사용자 정의 오류가있는
# is there more than 5req/1min from IP
acl http_rate_abuse sc0_http_req_rate gt 5
# update use_backend condition
use_backend SOMESERVER if whitelisted !http_rate_abuse
예를 들어 일부 작업 설정 파일 :
global
log /dev/log local1 debug
defaults
log global
mode http
option httplog
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
frontend http
bind *:8181
stick-table type ip size 200k expire 100s store http_req_rate(60s)
tcp-request content track-sc0 src
acl whitelist src 127.0.0.1
acl http_rate_abuse sc0_http_req_rate gt 5
use_backend error401 if !whitelist
use_backend error429 if http_rate_abuse
use_backend realone
backend realone
server local stackoverflow.com:80
# too many requests
backend error429
mode http
errorfile 503 /etc/haproxy/errors/429.http
# unauthenticated
backend error401
mode http
errorfile 503 /etc/haproxy/errors/401.http
참고 : 오류 처리가 약간 까다 롭습니다 IP
tcp-request content track-sc0 src
# more info at http://cbonte.github.io/haproxy-dconv/1.5/configuration.html#4.2-tcp-request%20connection
마지막으로 ACL에 의해. 위의 오류 백엔드에는 서버 항목이 없으므로 haproxy는 HTTP 503, errorfile
을 포착하고 다른 오류 (다른 코드 사용)를 보냅니다.
예 /etc/haproxy/errors/401.http
내용 :
HTTP/1.0 401 Unauthenticated
Cache-Control: no-cache
Connection: close
Content-Type: text/html
<html><body><h1>401 Unauthenticated</h1>
</body></html>
예 /etc/haproxy/errors/429.http
내용 :이을 시도하고 문제가 발생할 경우 우리에게 보여해야합니다
HTTP/1.0 429 Too many requests
Cache-Control: no-cache
Connection: close
Content-Type: text/html
<html><body><h1>429 Too many requests</h1>
</body></html>
. HAProxy 구성 파일은 일정 수준의 "프로그래밍"을 포함 할 수 있지만 HAProxy 질문에 대해서는 Stack Overflow보다 더 적합한 장소로 [Server Fault] (http://serverfault.com)를 찾을 수 있습니다. –