2017-10-23 21 views
2

규칙 A가 요청의 50 %에서 실행되고 B가 나머지 50 %에서 실행되도록 두 개의 IIS 다시 쓰기 규칙을 만들고 싶습니다. IIS 재 작성 모듈 AFAIK에는 기본 제공 임의 속성이 없습니다. 내 자신의 재 작성 모듈 확장을 개발하지 않고 그것을 달성하고 싶습니다.랜덤 확률 50/50의 IIS 다시 쓰기 규칙?

나는 무작위가 가능한 한 "참"인 것을 선호합니다 (의사 무작위 알고리즘이 물론 무작위 일 수있는 한).

  1. 현재 타임 스탬프를 확인하고 타임 스탬프의 패리티를 사용

    나는에 대한 두 가지 가능성을 생각했다. 그러한 서버 변수를 사용할 수 있습니까? 나는 그것을 찾지 못했다.
  2. 클라이언트 IP의 마지막 부분 (REMOTE_ADDR)의 패리티를 사용하십시오.

이러한 옵션 중 하나가 실현 가능합니까? 다시 쓰기 규칙으로 어떻게 구현할 수 있습니까? 더 나은 해결책이 있습니까? 그것은 REMOTE_ADDR 옵션과 같은

답변

1

이 가능하다 :

<!-- Condition for even IPs (50% connections) --> 
<add input="{REMOTE_ADDR}" pattern=".+[02468]$"/> 

<!-- Condition for odd IPs (the other 50% connections): --> 
<add input="{REMOTE_ADDR}" pattern=".+[13579]$"/> 

당신은 쉽게 패턴을 변경하여 그것을 30/70 또는 10/90을 만들 수 있습니다. 임의의 방법으로 쿠키를 설정

예 구성 :

<rewrite> 
    <outboundRules> 
     <rule name="set new=1 on half the requests" preCondition="new-cookie-is-not-set"> 
      <match pattern=".*" serverVariable="RESPONSE_Set_Cookie"/> 
      <conditions trackAllCaptures="false"> 
       <add input="{REMOTE_ADDR}" pattern=".+[02468]$"/> 
      </conditions> 
      <action type="Rewrite" value="new=1; Expires=Fri, 26 Apr 2020 00:00:00 GMT; HttpOnly"/> 
     </rule> 
     <rule name="set new=0 on the other half" preCondition="new-cookie-is-not-set"> 
      <match pattern=".*" serverVariable="RESPONSE_Set_Cookie"/> 
      <conditions trackAllCaptures="false"> 
       <add input="{REMOTE_ADDR}" pattern=".+[13579]$"/> 
      </conditions> 
      <action type="Rewrite" value="new=0; Expires=Fri, 26 Apr 2020 00:00:00 GMT; HttpOnly"/> 
     </rule> 
     <preConditions> 
      <preCondition name="new-cookie-is-not-set"> 
       <add input="{HTTP_COOKIE}" negate="true" pattern="new=[01]"/> 
      </preCondition> 
     </preConditions> 
    </outboundRules> 
</rewrite>