2017-10-23 13 views
2

ルールAが要求の50%で実行され、残りの50%がBで実行されるように、2つのIIS書き換えルールを作成したいとします。 IISリライトモジュールAFAIKには、組み込みのランダムプロパティはありません。自分の書き換えモジュール拡張モジュールを開発せずに達成したいのです。ランダム確率50/50のIIS書き換えルール?

私は可能な限り「真」であることを好みます(擬似ランダムアルゴリズムは当然ランダムである限り)。

私は約2の可能性考えた:

  1. は現在のタイムスタンプを取得し、タイムスタンプのパリティを使用します。そのようなサーバー変数はありますか?私はそれを見つけられませんでした。
  2. クライアントIP(REMOTE_ADDR)の最後の部分のパリティを使用します。

これらのオプションの1つは実現可能ですか?書き換えルールでそれらを実装するにはどうすればよいですか?より良い解決策はありますか?

答えて

1

REMOTE_ADDRオプションが実現可能であるように見えます:

<!-- 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> 
関連する問題