2017-04-19 4 views
2
CloudFlare 

IIS ARR 

Asp.net core 1.1.1 

私は曇りの後ろにあり、iis arrの後ろにいます。asp.net core X-Forwarded-ForとX-Forwarded-Protoの間のパラメータの数の不一致

にCloudFlareは、私は常にX-転送さ-の場合と X-転送さ-プロト間

パラメータカウント不一致を取得しています。http専用モード

です。

私のスタートアップファイル

ForwardedHeadersOptions forwardOption = new ForwardedHeadersOptions 
     { 
      ForwardedHeaders = Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedFor | Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedProto, 
      ForwardLimit = 2 
     }; 
     forwardOption.KnownProxies.Add(IPAddress.Parse("xxxxx")); 
     forwardOption.KnownProxies.Add(IPAddress.Parse("xxxxx")); 
     forwardOption.KnownProxies.Add(IPAddress.Parse("xxxxxx")); 
     forwardOption.KnownProxies.Add(IPAddress.Parse("xxxxxx")); 
     app.UseForwardedHeaders(forwardOption); 

と私は、IIS ARRレベルで、この書き換えルールを設定している私はまた

HTTP_X_FORWARDED_PROTO 
http 
replace the existing value 

enter image description here

HTTPSをテストしている問題は何ですか?ここ

linkですが、私は解決策はただあなたにこのコードを追加見つかりませ助け

+0

あなたはこれを手伝ってくれましたか? – Raskolnikoov

答えて

1

 services.Configure<ForwardedHeadersOptions>(options => 
     { 
      options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; 
      options.RequireHeaderSymmetry = false; 
      options.ForwardLimit = 2; 
      options.KnownProxies.Add(IPAddress.Parse("xxx.xxx.xxx.xxx")); 
      options.KnownProxies.Add(IPAddress.Parse("xxx.xxx.xxx.xxx")); 
      options.KnownProxies.Add(IPAddress.Parse("xxx.xxx.xxx.xxx")); 

     }); 

とあなたのbasecontroller上、またはどこか他の場合は実際のIPアドレスを取得するため、このコードを使用しconfigureservicesありませんあなたは雲の後ろにあり、Arr

public string GetRealIpAddress() 
    { 
     StringValues connectionIp; 
     var conncetionIpAvailable = Request.Headers.TryGetValue("Cf-Connecting-Ip", out connectionIp); 
     if (conncetionIpAvailable) 
     { 
      return connectionIp.ToString().Trim(); 
     } 
     else 
     { 
      var xForwardFor = Request.Headers.GetCommaSeparatedValues("X-Forwarded-For"); 
      string ipList = ""; 
      foreach (var x in xForwardFor) 
      { 
       ipList = ipList.Trim() + " , " + x.Trim(); 
      } 

      if (!string.IsNullOrEmpty(ipList.Trim())) 
      { 
       return ipList.Trim(); 
      } 
      else 
      { 
       return "xxx.xxx.xxx.xxx"; 
      } 
     } 
    } 
関連する問題