nginx로 A/B 테스트
Nginx의 맵 모듈은 IP 해시 또는 쿠키를 사용하여 IP 해싱 또는 쿠키를 기반으로 사용자를 A/B 그룹에 할당합니다. 쿠키가없는 경우 사용자 그룹의 일관성을 보장하기 위해 지속적인 쿠키를 설정하십시오. 3. 쿠키 값에 따라 다른 백엔드 또는 정적 디렉토리로의 경로; 4. HTTP 헤더를 통해 버전 정보 공급 계층 통계 분석을 통과합니다.
Nginx를 사용한 A/B 테스트는 복잡한 백엔드 논리 또는 타사 도구가 필요하지 않고 사용자에게 다양한 버전의 웹 컨텐츠를 제공하는 가볍고 효율적인 방법입니다. Nginx는 내장 map
모듈을 사용하여 쿠키, 헤더 또는 임의 할당을 기반으로 트래픽을 라우팅 할 수 있습니다. 간단하고 효과적으로 설정하는 방법은 다음과 같습니다.

✅ 왜 A/B 테스트에 nginx를 사용합니까?
- 앱 코드 변경 사항 없음 : 프록시 계층에서 트래픽 분할을 제어합니다.
- 빠르고 낮은 오버 헤드 : Nginx는 앱 서버를 누르기 전에 라우팅을 처리합니다.
- 영구 사용자 할당 : 쿠키를 사용하여 사용자가 동일한 그룹에 머무를 수 있도록합니다.
- 롤백하기 쉬운 : 구성 만 변경하고 nginx를 다시로드하십시오.
? ️ 기본 설정 : 스플릿 트래픽 50/50
Nginx의 map
모듈을 사용하여 사용자를 무작위로 버전 A 또는 B에 할당하십시오.
# HTTP 블록에서 지도 $ cookie_ab_test $ ab_version { ~*AA; ~*bb; 기본 ""; } # 쿠키가 없으면 무작위로 할당하십시오 지도 $ ab_version $ set_cookie { "" "";;; "ab_test = a"; b "ab_test = b"; } # 서버 블록에서 위치 / { # 아직 할당되지 않은 경우 쿠키를 설정하십시오 if ($ ab_version = "") { $ ab_version $ http_cookie를 설정합니다. # $ remote_addr 및 $ msec을 사용하여 의사 랜덤 행동을 얻습니다 $ ab_version $ http_cookie를 설정합니다. # 더 나은 : 해시 기반 접근법 사용 (아래 참조) } # 다른 백엔드 또는 근본 경로를 제공합니다 if ($ ab_version = "b") { proxy_pass http : // backend_b; # 또는 루트/var/www/b/; } proxy_pass http : // backend_a; # 기본 버전 }
⚠️ 이것은 기본 예입니다. 더 나은 임의성을 위해 클라이언트 IP 또는 사용자 에이전트의 해시를 사용하십시오.

지도 $ remote_addr $ ab_hash { ~.* "A"; 기본 "B"; } # 더 나은 : 결정하지만 일관된 할당을 결정합니다 지도 $ remote_addr $ ab_version { ~^(.) $ {capture} $ 1; 기본 ""; } # 또는 모듈 해시 사용 : 지도 $ remote_addr $ ab_version { ~.* "A"; 기본 "B"; }
더 나은 방법 - 소금과 함께 일관된 해시를 사용하십시오.
지도 $ remote_addr $ ab_version { ~^(? <ip>.) $ $ IP; } # IP를 0 또는 1로 해시합니다 지도 $ ab_version $ ab_group { ~.* "B"; 기본 "A"; }
실제로, 실제 50/50의 경우 다음을 수행하십시오.

지도 $ msec $ remote_addr $ ab_version { ~.* "A"; 기본 "B"; }
아니요, 여전히 사용자 당 결정되지 않습니다.
✅ 모범 사례 : IP 소금 해시를 사용하여 일관되게 할당하십시오 .
지도 $ remote_addr $ ab_version { ~.* "A"; 기본 "B"; } # 실제 버전 : 지도 $ remote_addr $ ab_hash { ~.* "A"; 기본 "B"; }
이것을 깨끗하게 고치겠습니다.
# HTTP 블록에서 지도 $ remote_addr $ ab_version { ~^(? <fird> [0-9a-fa-f] {1}) $ first; 기본 "0"; } # 16 진수를 숫자로 변환 한 다음 모드 2로 변환합니다 지도 $ ab_version $ ab_group { ~^[0-7] a; 기본 B; }
이것은 IP 당 ~ 50% 분할 및 일관된 할당을 제공합니다.
? 쿠키를 설정하십시오 (중요합니다!)
사용자가 ab_test
쿠키가없는 경우 다음을 설정하십시오.
# 위치 블록에서 if ($ cookie_ab_test = "") { add_header set-cookie "ab_test = $ ab_group; path =/; max-age = 31536000"; }
이제 사용자는 세션에서 그룹에 머물러 있습니다.
? 다른 콘텐츠를 제공하십시오
이제 경로 트래픽 :
위치 / { if ($ cookie_ab_test = "b") { proxy_pass http : // your-backend-b; 부서지다; } proxy_pass http : // your-backend-a; }
또는 정적 컨텐츠 인 경우 :
if ($ cookie_ab_test = "b") { 루트/var/www/html-b; } 루트/var/www/html-A;
? 추적 결과
버전을 앱에 로그하거나 전달해야합니다.
proxy_set_header x-ab-version $ cookie_ab_test;
그런 다음 앱이 사용자가 보았던 버전을 기록 할 수 있습니다. 분석에 유용합니다.
✅ 요약
-
map
사용하여 IP 또는 쿠키를 기반으로 사용자를 A/B 그룹에 할당하십시오. - 사용자가 한 그룹으로 유지하도록 지속적인 쿠키를 설정하십시오.
- 그룹을 기반으로
proxy_pass
또는root
통해 트래픽을 라우팅합니다. - 추적을 위해 헤더를 통해 앱에 버전을 전달하십시오.
이 방법은 빠르고 신뢰할 수 있으며 앱 논리를 깨끗하게 유지합니다. 고급 타겟팅이 필요하지 않는 한 JavaScript 실험 또는 외부 도구가 필요하지 않습니다.
기본적으로 Nginx 쿠키 맵 = 간단한 서버 레벨 A/B 테스트.
위 내용은 nginx로 A/B 테스트의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undress AI Tool
무료로 이미지를 벗다

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

definearatelimitzoneusinglimit_req_zoneinthehttpblock $ binary_remote_addr, azonenameandize, andarate (예 : rate = 10r/ s); 2. ApplyTheLimitusingLimit_ReqInthedEdeiredLocationBlock, 선택적으로 부과 standingNodelaytemporaryTrafficsPikes; 3.OP

Diski/OoverHeadMainPerformanceCENCENT, ASHIGHERQUESTVOLOSINCREASEWRITEOPERATIONS, 잠재적 인 보조 로버로드 디스크; 사용 ACCESS_LOGOFFFORNON-CRITICALPATHSIKE LICHEALTHECKSREDUCESURATYWRITES.2.complexLogformatswithmanyfieldorvar

Nginx의 GEO 모듈은 클라이언트 IP 주소를 기반으로 변수를 만드는 데 사용됩니다. 1. IP 범위 및 가변 값의 매핑은 HTTP 블록의 GEO 명령을 통해 개인 IP를 1로 설정하고 나머지를 0으로 설정하고 액세스 제어를 위해 서버 또는 위치 에서이 변수를 사용하는 것과 같은; 2. 국가 수준의 지리적 위치가 필요한 경우 기본 GEO 모듈은 GEOIP 데이터베이스의 직접 쿼리를 지원하지 않으며 타사 모듈 NGX_HTTP_GEOIP2_MODULE에 따라 다릅니다. 기본 GEO는 CIDRIP 세그먼트 (예 : 예 : 러시아 IP)를 수동으로 구성하는 데만 적용되지만 유지 보수는 어렵고 생산 환경에서 사용하기에는 권장되지 않습니다. 3. 모범 사례는지도 지침을 결합하여 $ C를 GEO를 먼저 설정하는 것과 같은 유연성을 향상시키는 것입니다.

API 게이트웨이로서 Nginx는 고성능, 낮은 대기 시간,로드 밸런싱 및 보안 제어의 장점이 있습니다. 1. 이벤트 중심 아키텍처를 채택하고 동시성이 높고 자원 소비가 낮은 것을 지원하며 API 응답 속도를 향상시킵니다. 2. 서비스의 고 가용성을 보장하기 위해 여러로드 밸런싱 전략 및 건강 검사를 지원합니다. 3. API 버전 관리를 용이하게하기 위해 경로 및 도메인 이름과 같은 규칙에 따라 URL을 라우팅하고 다시 쓸 수 있습니다. 4. 악성 요청을 방지하기 위해 현재 제한, IP 제어, JWT 검증 및 SSL 종료와 같은 보안 메커니즘을 제공합니다. 5. 지원 응답 캐싱, 백엔드 압력을 줄이며 읽기 집약적 인 API 성능을 향상시킵니다. 6. ELK 및 Grafana와 같은 모니터링 시스템과의 통합을 용이하게하기 위해 로그 형식을 사용자 정의합니다. 7. HTTP/2, HTTP/3 및 WebSocket을 지원합니다.

nginxusesamaster-workerarchitectionforhighperformanceandstable; themasterProcessManagesTheserVerByReadingConfigUrations, BindingPorts, StartingWorkers 및 HandlingSignals, WhereProcessShandlecesseshandlecessindentiallentySuinganeanvent-inn-blo

nginxhandleshttppsrequestsby terminatingsssl/tlsconnections, decryptingclientrequests 및 forwardingthemtobackendserverserverserverserversecortngercursatnginx, whereitmanagesthetshandshake, presectification 및 reseceRecurech

nginxdoesnatiallysupportenvirondmentvariablesinitsconfigurationfiles, butyoucanworkaroundshiSlimitationSeveralmethods : 1. usetheenvdirectivetopassspecificenvernmentvariasiblestoworkerprocesses, 그러나 thisdoesnotlakeworkerprocesses

usehttpbasicauthenticationwithhtpasswdtopassword-protectlocations; 2. RestrictByipusingallow/denyrules; 3. CombineBothwithsipyallfordualverification; 4.BlocksensitiveFilesViAregexOrdirectoryDenies; 5. MapModulesforcountry Basistrictions; 6.apply;
