
æåºãšããŠæè¿ããŸãã
1幎ååŸïŒ4ã€ã§ã¯ãªãïŒãè峿·±ãæ©èœãåãã
HAProxy 1.6ã®å®å®ããããŒãžã§ã³ãçãŸãããšããè¯ããã¥ãŒã¹ãæ¥ãã§äŒããŸãã
ããã¯ããã©ãŒã«ããã¬ã©ã³ã¹ãä¿èšŒããTCPããã³HTTPèŠæ±ã®ãã©ã³ã¹ãšãããã·ãæäŸããè¶
é«éãœãªã¥ãŒã·ã§ã³ã§ããããšãæãåºãããŠãã ããã
äœãã§ããå€ãã®ã¯ãšãªãã©ã³ã·ã³ã°ã¢ã«ãŽãªãºã å€ãã®åºæºã«ãããªã¯ãšã¹ãã®ã«ãŒãã£ã³ã°ãšãã£ã«ã¿ãªã³ã°
SSLçµäºãSNI / NPN / ALPNããã³OCSPã¹ããŒãã«ãå«ã
HTTPããããŒæäœãšACLãµããŒã
ãã§ãã¯ã«ããHTTPããã³TCPããã¯ãšã³ããµãŒããŒã®ç£èŠ
VRRPãšã®ç°¡åãªçµ±åïŒããŒãã¢ã©ã€ãïŒ
å§çž®ïŒgzipãdeflateïŒ
syslogãµããŒããæè»ãªãã°åœ¢åŒ
ã»ãŒç¡å¶éã®æ°ã®ãµãŒããŒããã¡ãŒã ããµãŒãã¹
ã»ãã¥ãªãã£ïŒ13幎éã§1ã€ã®ããã¯ã§ã¯ãããŸããïŒ
IPv6ããã³UNIXãœã±ããã®ãµããŒã
...ããã³ä»ã®å€ãã®å¯èœæ§
LANã§æ€åºããããã¹ãŠã®äžæ£ç¢ºããšãšã©ãŒã«ã€ããŠãé£çµ¡ãã ããããã¿ããã«ä¿®æ£ããŸãããã®èšäºã§
㯠ãããŒãžã§ã³çªå·
1.6ã®ãªãªãŒã¹ãã©ãã»ã©æ³šç®ã«å€ããããã©ã®ã€ãããŒã·ã§ã³ã«æ³šæãæãã¹ããããããã®ã€ãããŒã·ã§ã³ãè©Šãæ¹æ³ãç°¡åã«èª¬æããŸãã ãã®èšäºã®äŸã¯ãæ
£ããããã«æç€ºãããŠããããã®ã¢ããªã±ãŒã·ã§ã³ã¯
ãåžžã«æŽæ°ãããããã¥ã¡ã³ãã®ããŒãžãåç
§
ããå¿
èŠæ§ãå
é€ãããŠããŸããã
æåŸã«åŒæ°ã«åŒçšç¬Šã䜿çšã§ããŸã
ããã¯æ¬åœã«è¯ããã¥ãŒã¹ã§ãã æ§æãã¡ã€ã«ã«è²Œãä»ãããšãã«ãããããŒãªã©ã®ããã¯ã¹ã©ãã·ã¥ã§ã¹ããŒã¹ãæ¿å
¥ããå¿
èŠããªããªããŸããã
reqirep "^Host: www.(.*)" "Host: foobar\1"
option httpchk GET / "HTTP/1.1\r\nHost: www.domain.com\r\nConnection: close"
ã«ã¢
ã©ãããããšã€ããªã«ããŒã«ã®éçºè
ãã¡ã®åè«ã¯ãHAProxyå
šäœãLUAã«æžãæããããšã決ãããšããããšã§ãæ©èœã«ãã©ã¹ã®å¹æããããŸããã ããã¯ã1.5ã§SSLã䜿çšãããŠããããã«ã1.6ã§å€§ããªå€æŽãšãªã£ãå¯èœæ§ããããŸãã
ããšãã°ãããã©ãŒãWebãµãŒããŒã®å®è£
ãèŠãŠã¿ãŸãããã å¿çæ¬æã®ããããŒã倿Žããã«è¿ããŸãã
global lua-load ./webmirror.lua frontend fe_habrahabr bind :81 name frontend_name http-request lua mirror default_backend be_habrahabr backend be_habrahabr server main_nginx 127.0.0.1:82
-webmirror.lua
function mirror(txn) local buffer = "" local response = "" local mydate = txn.sc:http_date(txn.f:date()) buffer = buffer .. "You sent the following headers/r/n" buffer = buffer .. "===============================================/r/n" buffer = buffer .. txn.req:dup() buffer = buffer .. "===============================================/r/n" response = response .. "HTTP/1.0 200 OK/r/n" response = response .. "Server: haproxy-lua/mirror/r/n" response = response .. "Content-Type: text/html/r/n" response = response .. "Date: " .. mydate .. "/r/n" response = response .. "Content-Length: " .. buffer:len() .. "/r/n" response = response .. "Connection: close/r/n" response = response .. "/r/n" response = response .. buffer txn.res:send(response) txn:close() end
$ curl -v 127.0.0.1:82 HTTP/1.0 200 OK Server: haproxy-lua/mirror Content-Type: text/html Date: Fri, 12 Mar 2015 13:06:44 GMT Content-Length: 208 Connection: keep-alive You sent the following headers =============================================== GET / HTTP/1.1 User-Agent: curl/7.41.0 Host: 127.0.0.1:82 Accept: */* ===============================================
ãŸãã¯ãããšãã°ãtcpãµãŒããŒïŒ
global lua-load hello_world.lua listen proxy bind 127.0.0.1:10001 tcp-request content use-service lua.hello_world
-hello_world.lua
core.register_service("hello_world", "tcp", function(applet) applet:send("hello world\n") end)
ã»ã¯ã·ã§ã³éã§ããããŒãæž¡ãïŒã³ã³ããã¹ãïŒ
以åã¯ãåã³ã³ããã¹ãã¯åé¢ãããŠããŸããã ã€ãŸããèŠæ±ããããŒãå¿çã«äœ¿çšã§ããŸããã§ããã ããããä»ã§ã¯å¯èœã§ãã
defaults mode http frontend fe_habr bind :9001 declare capture request len 32
ãã«ãããã»ãã·ã³ã°ããã¢ãããã³ã¹ãã£ãã¯ããŒãã«
peerã¯å¥ã®haproxyã€ã³ã¹ã¿ã³ã¹ã§ãã ããšãã°ãå¥ã®VMãå¥ã®DCãªã©ã
stick-table-ããšãã°ã1ã€ã®IPã¢ãã¬ã¹ããã®1ç§ãããã®ãªã¯ãšã¹ãæ°ãåæã»ãã·ã§ã³æ°ããšã©ãŒçãCookieã«ããã»ãã·ã§ã³IDãªã©ã«é¢ããæ
å ±ãæ ŒçŽããããã®ãã©ããããŒã¿ããŒã¹
1.5ã«ã¯ïŒ1.6ã«ïŒ
peersã®ãããªãã©ã¡ãŒã¿ãŒããããŸããã ãã©ã³ãµãŒéã§
ã¹ãã£ãã¯ããŒãã«ãåæããããã«èšèšãããŠããŸãã ãŸããæ®å¿µãªãããhaproxyïŒnbprocãã©ã¡ãŒã¿ãŒïŒã§ãã«ãããã»ãã·ã³ã°ãæå¹ã«ãªã£ãŠãããšãã¡ã¢ãªå
ã®åããã»ã¹ã®ç¬èªã®ããŒãã«ãåå ã§ããã®æ©èœãæ£ããåäœããªããªããŸããã
ãœãªã¥ãŒã·ã§ã³ã¯
bind-process
ãã©ã¡ãŒã¿ãŒã®åœ¢ã§æäŸãããäŸã§ã¯ãã®äœ¿ç𿹿³ãæç¢ºã«ç€ºãããŠããŸãã
peers article peer itchy 127.0.0.1:1023 global pidfile /tmp/haproxy.pid nbproc 3 defaults mode http frontend f_scalessl bind-process 1,2 bind :9001 ssl crt /home/bassmann/haproxy/ssl/server.pem default_backend bk_lo backend bk_lo bind-process 1,2 server f_myapp unix@/tmp/f_myapp send-proxy-v2 frontend f_myapp bind-process 3 bind unix@/tmp/f_myapp accept-proxy default_backend b_myapp backend b_myapp bind-process 3 stick-table type ip size 10k peers article stick on src server s1 10.0.0.3:4444 check
ãã°ïŒsyslogã¿ã°ãšæ°ãã倿°
ãã以éããã°ã®ãã£ã«ã¿ãªã³ã°ã®äŸ¿å®äžãããã³ããšã³ããããã¯ãšã³ããããã³ããã»ã¹ããšã«ããŸããŸãªsyslogã¿ã°ãé©çšã§ããŸãã ãã©ã¡ãŒã¿ãæå®ãããŠããªãå Žåãhaproxyãšããåèªã䜿çšãããŸãã
frontend fe_habr_ssl log-tag SSL [...] frontend fe_habr log-tag CLEAR [...]
log-formatãã©ã¡ãŒã¿ãŒã§äœ¿çšã§ããæ°ãã倿°ïŒ
%HM: HTTP method (ex: POST) %HP: HTTP request URI without query string (path) %HQ: HTTP request URI query string (ex: ?bar=baz) %HU: HTTP request URI (ex: /foo?bar=baz) %HV: HTTP version (ex: HTTP/1.0)
DNSãµãŒããŒå
ããŒãžã§ã³1.5以åã§ã¯ãDNSåãããã¯ãšã³ããšããŠæå®ãããå ŽåãHAProxyã¯èµ·åæã«IPã¢ãã¬ã¹ãåãåããglibcïŒ/etc/resolv.confïŒã䜿çšããŸãã
1.6ã§ã¯ãHAProxyã¯ãã®å Žã§IPã¢ãã¬ã¹ãžã®ååã®é¢é£æ§ãéåæçã«ãã§ãã¯ããæç€ºçã«æå®ãããDNSãµãŒããŒã䜿çšããŸãã ããã«ãããããã¯ãšã³ãã®ãµãŒããŒIPã¢ãã¬ã¹ã倿Žãããå Žåã«ãã©ã³ãµãŒãåèµ·åããå¿
èŠããªããªããŸãïŒããã¯ãDockerãŸãã¯Amazon Web Serviceç°å¢ã§ããçºçããŸãïŒã
Dockerã®æ§æäŸïŒ
resolvers docker nameserver dnsmasq 127.0.0.1:53 defaults mode http log global option httplog frontend fe_habr bind :80 default_backend be_habr backend be_habr server s1 nginx1:80 check resolvers docker resolve-prefer ipv4
ããã§ããdocker restart nginx1ãã³ãã³ãã䜿çšããŠnginxã§ã³ã³ãããåèµ·åãããšããã°ã«ãã®æ©èœã®èšŒæ ã衚瀺ãããŸãã
(...) haproxy[15]: b_myapp/nginx1 changed its IP from 172.16.0.4 to 172.16.0.6 by docker/dnsmasq.
HTTPãªã¯ãšã¹ããåŠçããããã®ã«ãŒã«
HTTPèŠæ±ãåŠçããããã®æ°ããã«ãŒã«ãç»å ŽããŸããã
http-requestïŒãã£ããã£ãset-methodãset-uriãset-mapãset-varãtrack-scXãsc-in-gpc0ãsc-inc-gpt0ãsilent-drop
http-responseïŒãã£ããã£ãset-mapãset-varãsc-inc-gpc0ãsc-set-gpt0ããµã€ã¬ã³ãããããããªãã€ã¬ã¯ã
DDoSã䜿çšããæŠéæ©ã¯ãè峿·±ã
silent-drop
ãã©ã¡ãŒã¿ãŒã«æ³šæãæãå¿
èŠããããŸãã
reqtarpit/reqitarpit
眮ãæããããšãã§ã
reqtarpit/reqitarpit
ã
ãã®çµæãHAProxyã«
silent-drop
ãé©çšããåŸã«ã¯ã©ã€ã¢ã³ãã確ç«ããæ¥ç¶ïŒESTABLISHEDïŒããã©ã³ãµãŒã®æ¥ç¶ãªã¹ãããæ¶ãããªãœãŒã¹ãè§£æŸãããŸãã ãããã£ãŠããã©ã³ãµãŒã®è²ŽéãªãªãœãŒã¹ãç¡é§ã«ããããšãªããã¯ããã«åŒ·åãªæ»æãæéããããšãã§ããŸãã ãã ãããã®æ¥ç¶ãééãããã¹ãŠã®ãã¡ã€ã¢ãŠã©ãŒã«ããããã·ããã©ã³ãµãŒã¯ããã®æ¥ç¶ãä¿æãç¶ããé²åŸ¡ã®ããã«ããã¯ïŒãããã«ããã¯ãïŒã«ãªãå¯èœæ§ãããããšãèŠããŠãã䟡å€ããããŸãã
倿°
以åã«HTTPããããŒã䜿çšããŠãHAProxyã«äžæããŒã¿ãä¿åããŠããŸããã é¡èãªäŸã¯ã
1ç§ãããã®ãªã¯ãšã¹ãæ°ã1.5ã«å¶éãããŠããããšã§ãã
çŸåšã倿°ããããŸãã
ãŠãŒã¶ãŒãšãŒãžã§ã³ããå°æåã§èšè¿°ããŸãã
http-request set-var(req.my_var) req.fhdr(user-agent),lower
倿°ã䜿çšããŠæžãæããããã³ã³ããã¹ãã®äŸ
global
éµäŸ¿
HAProxyã¯æçŽãéãããšãåŠã³ãŸããã ããšãã°ãããã¯ãšã³ããå¿çããªããªã£ãã
以äžã®äŸã¯ããããããã®ã€ãããŒã·ã§ã³ã®ãã¹ãŠã®å¯èœæ§ãã«ããŒããŠããŸãã æ¿èªãµããŒããªãã
mailers mymailers mailer smtp1 192.168.0.1:587 mailer smtp2 192.168.0.2:587 backend be_habr mode tcp balance roundrobin email-alert mailers mymailers email-alert from haproxy@habrahabr.ru email-alert to admin@habrahabr.ru server srv1 192.168.0.30:80 server srv2 192.168.0.31:80
HTTPãªã¯ãšã¹ãæ¬æã®åŠç
ããã§ãHTTPããããŒã®åŠçã«å ããŠããªã¯ãšã¹ãæ¬æãåŠçã§ããããã«ãªããŸããã
option http-buffer-request
ããã³ããšã³ããŸãã¯ããã¯ãšã³ãã»ã¯ã·ã§ã³ã«å«ãŸã
option http-buffer-request
ããŒãžã§ã³1.5ã§ã¯ãslowlorisãªã©ã®æ»æã«å¯ŸåŠããããšãå¯èœã§ããããã®æ»æã§ã¯ãæ¥ç¶ã¿ã€ã ã¢ãŠãã®çŽåã«ãæ»æè
ããã®ãªã¯ãšã¹ãããããŒãå¯èœãªéãäœéã§éä¿¡ãããŸãã
ããããPOSTèŠæ±ã®æ¬æãã§ããã ãé
ãéä¿¡ããããšã劚ãããã®ã¯ããŸããã§ããã ããŒãžã§ã³1.6ã§ã¯ãæ»æè
ãããã®æ©äŒã奪ãããšãã§ããŸãã
ãšããã§ã
http-buffer-request
ãªãã·ã§ã³ã䜿çšãããšãreq.bodyãreq.body_paramãreq.body_lenãreq.body_sizeãªã©ã®ã¡ãœããã䜿çšã§ããããã«ãªããŸãã
POSTãªã¯ãšã¹ãã®æ¬æã«ãããSELECT *ãè¡ã®èšåããããã¯ããæ¹æ³ã®äŸã次ã«ç€ºããŸãã
defaults mode http frontend f_mywaf bind :9001 option http-buffer-request http-request deny if { req.body -m reg "SELECT \*" } default_backend b_myapp backend b_myapp server s1 10.0.0.3:4444 check
ã³ã³ããŒã¿ãŒ
ACLã§äœ¿çšãããããããæ¹æ³ã§æ§æãç°¡çŽ åããŸããã ããšãã°ããããã®ãªããªã¯ãšã¹ããã«ãŒãã£ã³ã°ããå ŽåïŒ
frontend ft_allapps [...] use_backend bk_app1 if { hdr(Host) -i app1.domain1.com app1.domain2.com } use_backend bk_app2 if { hdr(Host) -i app2.domain1.com app2.domain2.com } default_backend bk_default
ã³ã³ããŒã¿ãŒã®å ŽåïŒ
frontend ft_allapps [...] use_backend %[req.hdr(host),lower,map(/etc/haproxy/domain2backend.map,bk_default)]
-domain2backend.map
䟿å©ã§ããã
ãã®ããã1.6ã§ã¯ããã«å€ãã®ãã®ããããã³ã¡ã³ãã«ãã誰ãã®äŸã«æè¬ããŸãã
ã¯ã©ã€ã¢ã³ãããã€ã¹ã®å®çŸ©
äºæ³å€ã«ãHAProxyã¯
DeviceAtlasããã³
51Degreesãš
飿ºããŠ
ããã€ã¹ã®ã¿ã€ããå€å¥ããçµæã®ããã¯ãšã³ããéä¿¡ããæ©äŒãåŸãŸããã
DeviceAtlasã®æ§æäŸïŒ
global deviceatlas-json-file <path to json file> frontend www-only-ua bind *:8881 default_backend servers
51Degreesã®å ŽåïŒ
global 51degrees-data-file '51D_REPO_PATH'/data/51Degrees-LiteV3.2.dat 51degrees-property-name-list IsTablet DeviceType IsMobile 51degrees-property-separator , 51degrees-cache-size 10000 frontend www-only-ua bind *:8082 default_backend servers
泚æïŒ ããã©ã«ãã§ã¯ããµããŒãã¯æå¹ã«ãªã£ãŠããŸããã ããã䜿çšããã«ã¯ã次ã®ãã®ãå¿
èŠã§ãã
DeviceAtlasã®å ŽåïŒ
DeviceAtlasããAPIãœãŒã¹ã³ãŒããããŠã³ããŒããã
次ã®ãã©ã¡ãŒã¿ãŒã䜿çšããŠHAProxyãã³ã³ãã€ã«ããŸãã
$ make TARGET=<target> USE_PCRE=1 USE_DEVICEATLAS=1 DEVICEATLAS_SRC=<path to the API root folder>
51Degreesã®å ŽåïŒ
$ git clone https://github.com/51Degrees/Device-Detection
äœæ¥æ¹æ³ãéžæããŸãã
*ãã¿ãŒã³-ã¡ã¢ãªãšããã»ããµãåçã«äœ¿çšããŠåäœãã
$ make TARGET=linux26 USE_51DEGREES=1 51DEGREES_SRC='51D_REPO_PATH'/src/pattern
* Trieã¯ããã¿ãŒã³ããã倧å¹
ã«å€ãã®ã¡ã¢ãªã䜿çšãã髿§èœã¢ã«ãŽãªãºã ã§ã
$ make TARGET=linux26 USE_51DEGREES=1 51DEGREES_SRC='51D_REPO_PATH'/src/trie
ããã¯ãšã³ããµãŒããŒã®ç¶æ
ãä¿åãã
1.5ã§ã¯ããªããŒããŸãã¯åèµ·åã³ãã³ããåä¿¡ãããšãHAProxyã¯æåã®ãã§ãã¯ã®åã«ãã¹ãŠã®ãµãŒããŒã«UPã¹ããŒã¿ã¹ãå²ãåœãŠãŸããã ãµãŒãã¹ã®ã¢ããã¿ã€ã ã®1ç§ããšã«è²»çšããããå Žåãããã¯åãå
¥ããããŸããã 1.6ã§ã¯ãåèµ·åæã«ããã¯ãšã³ãã«é¢ããæ
å ±ãä¿åããããã¡ã€ã«ãžã®ãã¹ãæå®ã§ããŸãã
global stats socket /tmp/socket server-state-file /tmp/server_state backend bk load-server-state-from-file global server s1 10.0.0.3:4444 check weight 11 server s2 10.0.0.4:4444 check weight 12
åèµ·åããåã«ãããã¯ãšã³ãã®ç¶æ
ãä¿åããŸãã
socat /tmp/socket - <<< "show servers state" > /tmp/server_state
ã¿ã¹ã¯ãå®äºããèµ·åæã«haproxyããã¡ã€ã«ãèªã¿åããããã«ã¡ã¢ããŸãã
å€éšãã§ãã¯
1.5ã§ã¯ãæå®ãããããŒãã«å®æçã«æ¥ç¶ããããšã«ãããããã¯ãšã³ããµãŒããŒã®ã¹ããŒã¿ã¹ã確èªã§ããŸãã
1.6ã§ã¯ããããã®ç®çã®ããã«ããµãŒãããŒãã£ã®ã¹ã¯ãªããã远å ã§äœ¿çšã§ããŸãã
global external-check backend b_myapp external-check path "/usr/bin:/bin" external-check command /bin/true server s1 10.0.0.3:4444 check
TLS / SSL
åãIPã¢ãã¬ã¹ã§ECCãšRSAããµããŒã
ECCã¯RSAãšåæ§ã«ã³ã³ãã³ããä¿è·ããŸãããããŒãµã€ãºãå°ããããããµãŒããŒã§ãªã¯ãšã¹ããåŠçããæéãçããªããšèããããŠããŸãã æ®å¿µãªããããã¹ãŠã®ã客æ§ãECCããµããŒãããŠããããã§ã¯ãããŸãããããã¹ãŠã®ãŠãŒã¶ãŒãšã®äºææ§ãå¿
èŠã§ãã
å®è£
ã«ã¯ããã¡ã€ã³çšã®ECCããã³RSAèšŒææžãHAProxyããŒãžã§ã³1.6ãããã³æ¬¡ã®æ§æãå¿
èŠã§ãã
frontend ssl-relay mode tcp bind 0.0.0.0:443 use_backend ssl-ecc if { req.ssl_ec_ext 1 } default_backend ssl-rsa backend ssl-ecc mode tcp server ecc unix@/var/run/haproxy_ssl_ecc.sock send-proxy-v2 backend ssl-rsa mode tcp server rsa unix@/var/run/haproxy_ssl_rsa.sock send-proxy-v2 listen all-ssl bind unix@/var/run/haproxy_ssl_ecc.sock accept-proxy ssl crt /usr/local/haproxy/ecc.www.foo.com.pem user nobody bind unix@/var/run/haproxy_ssl_rsa.sock accept-proxy ssl crt /usr/local/haproxy/www.foo.com.pem user nobody mode http server backend_1 192.168.1.1:8000 check
E5-2680v3 CPUããã³OpenSSL 1.0.2ã§ãã³ãããŒã¯çµæããããŸãã
256bit ECDSA: sign verify sign/s verify/s 0.0000s 0.0001s 24453.3 9866.9 2048bit RSA: sign verify sign/s verify/s 0.000682s 0.000028s 1466.4 35225.1
å¿çã®çœ²åã§ã»ãŒ15åã®å¢å ã
ãã®å Žã§SSLèšŒææžã®åœé
ããã«ãããäŒæ¥ã§HAProxyã䜿çšããŠãªã¯ãšã¹ãã®ã³ã³ãã³ããåæã§ããŸãã
èšŒææžã®éææ§ã®ãµããŒãïŒRFC6962ïŒ
.pemãã¡ã€ã«ïŒããŒãæã€èšŒææžãã§ãŒã³ïŒãããŒããããšããHAProxyã¯åãååãšæ¥å°ŸèŸ.sctlã®ãã¡ã€ã«ãåãæ¹æ³ã§èŠã€ããããšããŸãã æ€åºããããšãTLSèšŒææžã®éææ§ã®ãµããŒããæå¹ã«ãªããŸãã OpenSSLããŒãžã§ã³1.0.2以éãå¿
èŠã§ãã çŸåšãCertificate Transparencyæ¡åŒµæ©èœã§ã¯ã2015幎ã«çºè¡ãããEVèšŒææžã«Chromeãå¿
èŠã§ãã
SSLããã¯ãšã³ããžã®æ¥ç¶æã®SNIãµããŒã
backend b_myapp_ssl mode http server s1 10.0.0.3:4444 check ssl sni req.hdr(Host)
HTTPåå©çš
ããã©ã«ãã§ã¯ãHAProxyãšããã¯ãšã³ããµãŒããŒã®éã«ç¢ºç«ãããæ¥ç¶ã¯ããããéå§ããã»ãã·ã§ã³ã«å±ããŸãã ãã®ã¢ãããŒãã®æ¬ ç¹ã¯ããªã¯ãšã¹ãéã§ãã®æ¥ç¶ãã¢ã€ãã«ã«ãªãããšã§ãã ã»ãšãã©ã®å Žåããããã®æ¥ç¶ãä»ã®ã»ãã·ã§ã³ãšåå©çšãããšãããã¯ãšã³ãã®ããã©ãŒãã³ã¹ãåäžããŸãã
ãªãã·ã§ã³
http-reuse
4ã€ã®ç°ãªãã¢ãŒãã§ã¯ããããã®ã¢ã€ãã«æ¥ç¶ã䜿çšã§ããŸãã
ãšã©ãŒ408
ãã®ãšã©ãŒã¯ãã€ã³ã¿ãŒãããã§ã®ãµãŒãã£ã³ãé«éåããããã«èšèšããããæ¥ç¶åã®æ¥ç¶ã¿ã€ã ã¢ãŠããåå ã§ãã©ãŠã¶ã§çºçããŸããã
1.5ã§ã¯ã
defaults
ã»ã¯ã·ã§ã³ã®
errorfile 408 /dev/null
ã§åŠçãããŠããŸããã
1.6ã¯
http-ignore-probes
ãªãã·ã§ã³ã䜿çšããå¿
èŠããããŸã
çµè«ãšããŠããã¹ãŠã®æ°ããããŒãžã§ã³ã«ã¯å€ãæ§æãã¡ã€ã«ãšã®å®å
šãªåŸæ¹äºææ§ããããæ°ããããŒãžã§ã³ã«æŽæ°ããŠãé çã®çš®ã«ã¯ãªããªãããšãæãåºããŠãã ããã ãŸããäžèšã®æ©äŒã¯ãéå»1幎åã«ããã£ãŠéçºè
ãè¡ã£ãäœæ¥ã®ã»ãã®äžéšã«ãããŸããã
ãã®ã¬ãã¥ãŒã«ã泚æããã ãããããšãããããŸãã ã³ã¡ã³ããšPMã§è³ªåã«ãçãããŸãã