iPhone OS 11_3 http 연결 홍수

iPhone OS 11_3 http 연결 홍수

나는 동일한 IP에서 오는 내 서버의 포트 80에 대한 최대 TCP 연결을 제한하려고 노력해 왔습니다. 이 작업에는 iptables를 사용했습니다.

-A INPUT -p tcp --dport 80 -m conntrack --ctstate ESTABLISHED -m connlimit --connlimit-above 24 --connlimit-mask 32 -j LOG_THROT

규칙은 패킷을 내 LOG_THROT 체인으로 보내고 여기서 패킷을 기록하고 tcp가 연결을 재설정합니다.

문제는 기록되고(24개의 병렬 http 연결 규칙 오버플로딩) Apache의 액세스 로그에서 발견되는 모든 IP가 Vodafone 등과 같은 표준 모바일 ISP에서 오는 Google의 추천을 가진 합법적인 사용자처럼 보인다는 것입니다. 이들 모두의 공통점은 사용자입니다. 에이전트는 다음과 같습니다.

Mozilla/5.0(iPhone; Mac OS X와 ​​같은 CPU iPhone OS 11_3) AppleWebKit/605.1.15(Gecko와 같은 KHTML) 버전/ 11.0 Mobile/15E148 Safari/604.1

새로운 OS/브라우저가 표준 6 병렬 연결보다 더 높은 제한을 가지고 있는지 궁금합니다. 웹사이트에 있는 링크를 미리 로드하여 추가 연결을 생성하는 것인지, 아니면 일종의 UA를 스푸핑하는 크롤러인지 궁금합니다.

그것이 합법적이라면 안전한 연결 수 제한에 대해 무엇을 제안합니까? 50, 100?

답변1

웹을 조정하고 HTTP/2(최종 HTTPS)를 사용하는 것은 어떨까요?

둘 다 HTTP1.x의 다중 연결 대신 단일 다중 연결을 사용합니다. 도메인 샤딩 기술은 더 이상 필요하지 않습니다.

답변2

이 문제가 해결되었습니다. 그러나 대답은 최상의 솔루션과 다릅니다. 가장 좋은 해결책은 prosti의 답변입니다.

앞서 언급한 Safari/iOS는 연결 유지 연결을 재사용하지 않는다는 것입니다. 그 이유는 다양할 수 있으며 인터넷은 이 주제에 대한 다양한 답변으로 가득 차 있으며 최신 버전에서는 더 이상 사용되지 않는 기능일 수도 있습니다. 이 주제에 대해서는 Apple 포럼이 쓸모가 없었습니다.

따라서 웹사이트에서 로드해야 하는 모든 자산에 대해 새로운 연결이 생성되지만 X초 동안 conns를 활성 상태로 유지하는 서버는 결국 iptables 규칙의 임계값에 도달합니다.

나에게 도움이 된 해결책은 모든 iphone/ipod 장치와 일치하고 해당 장치에 대한 연결 유지 지원을 끄는 httpd.conf에 BrowserMatch 지시문을 추가하는 것이었습니다.

BrowserMatch "iPhone|iPad|iPod" nokeepalive

Safari가 생성할 수 있는 최대 연결에 대해 일부 잘못된 상황에서는 최대 15000까지 올라갈 수 있다는 문서를 발견했습니다!! (https://www.wiktorzychla.com/2017/06/http2-keep-alive-and-safari-browsers.html). 그러나 일반적인 상황에서는 이 통계로 판단할 때 도메인당 4~8개 또는 샤딩 15~30개에 더 가깝습니다.http://www.browserscope.org/?category=network&ua=Safari*&v=3

관련 정보