2016-08-15 58 views
0

QA團隊發現,當Web服務器(提供嵌入式設備UI)的系統,其中主DNS服務器不可達上運行,用戶界面變得無法忍受的反應遲鈍 - 採取一些16S的每一個動作。Web請求變得非常慢,當DNS服務器無法訪問

首先我計算過,提供靜態頁面不存在這個問題。

不包括我的第一個犯罪嫌疑人 - 日誌 - 我終於精確定位的原因Intelligencia.UrlRewriter(NuGet包版本2.0.0.9)。看來,在每個請求中,重寫器都會生成所有服務器變量的副本,其中包括「REMOTE_HOST」。這是一個動態變量,只在需要時運行。這又涉及致電HttpRequest.UserHostName

的問題很簡單:如何避免在使用UrlRewriter Web應用程序反向地址查詢?

我提供了一個大鐵錘回答自己,但想聽聽其他選項。

回答

0

我已經把另一個類庫項目有一個簡單的HTTP模塊:

public sealed class NoRemoteHostLookup : IHttpModule 
{ 
    public void Dispose() 
    { 
    } 

    public void Init(HttpApplication context) 
    { 
     context.BeginRequest += ContextOnBeginRequest; 
    } 

    private void ContextOnBeginRequest(object sender, EventArgs eventArgs) 
    { 
     var request = HttpContext.Current?.Request; 

     if (request != null) 
      request.ServerVariables["REMOTE_HOST"] = request.ServerVariables["REMOTE_ADDR"]; 
    } 
} 

這然後由Web應用程序項目引用,並在web.config中配置前UrlRewriter:

<system.web> 
    <httpModules> 
     <add type="NoRemoteHostLookupModule.NoRemoteHostLookup, NoRemoteHostLookupModule" name="NoRemoteHostLookup" /> 
     <add type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter" name="UrlRewriter" /> 
    </httpModules> 
</system.web> 
  • 一旦「REMOTE_HOST」變量被設置,從後解析其當由UrlRewriter訪問在框架上制止。
  • 這是一個理論。它適用於我的Visual Studio調試會話,但不適用於我的單聲道目標框架,我得到一個System.NotSupportedException。
  • 我作了一個錯誤報告https://github.com/sethyates/urlrewriter/issues/9
  • 同時,我將重寫規則轉移到nginx配置並剝離了生產中的UrlRewriter。