2011-10-18 43 views

回答

3

在IIS中配置你希望自己的網站響應正是IP/DNS名稱的組合。您可以輕鬆強制它僅對特定IP進行響應。

對於IIS 7:

  1. 打開Internet信息服務(IIS)管理器
  2. 展開在你的網站的站點,然後右鍵單擊。
  3. 點擊編輯綁定。
  4. 編輯現有條目並將IP地址設置爲161.0.0.1。還要將域名設置爲domain.com。
  5. 點擊確定,點擊關閉。

現在您的網站將只響應該特定域名,並且不會僅通過IP地址進行響應。

如果您的站點使用,然後SSL證書請參見下面的問題,其講述如何配置IIS以迫使主機使用:

https://serverfault.com/questions/96810/iis7-cant-set-host-name-on-site-with-ssl-cert-and-port-443
哪個環節:
http://www.sslshopper.com/article-ssl-host-headers-in-iis-7.html

這鏈接完全通過UI完成:http://blog.armgasys.com/?p=80

+0

這不是他要求的。如果服務器只有一個IP和一個DNS主機名指向該IP,他希望服務器在請求DNS主機名時作出響應,而不是在請求IP時響應。 – pseudocoder

+0

@pseudocoder:在這種情況下,請將域名與IP一起設置。在這種情況下,IIS不允許直接的IP地址請求。輕微的編輯,以清除此問題。 – NotMe

+0

這也是如此,並在我最近的帖子中提到,但不適用於HTTPS。這就是爲什麼我包含HttpModule示例的原因。 – pseudocoder

2

好吧,如果您希望通過DNS名稱訪問站點,而不是通過IP訪問,則區分這一點的唯一方法是檢查報頭中請求的主機名。有兩種方法可以做到:

1)在IIS管理器中配置綁定對話框。這是最容易設置的,但不適用於HTTPS。只需將www.domain.com放入主機名字段,並向IP請求就會被拒絕。對於HTTPS,如果您的安全證書是針對特定主機名的,那麼如果用戶嘗試通過IP連接,則會收到安全警告,但通常它們可以覆蓋警告(取決於瀏覽器設置)。

編輯: Chris Lively已經鏈接到一種使HTTPS綁定工作的方法,請參閱他的回答以獲取更多信息。

2)或者,您可以檢查代碼中的標題。這是一個IHttpModule的例子,它可以完成你想要的任務。它也是一個在web.config中配置的插入式解決方案。

代碼:

Public Class HostNameCheck 
    Implements IHttpModule 

    Public Sub Dispose() Implements System.Web.IHttpModule.Dispose 
    End Sub 

    Public Sub Init(context As System.Web.HttpApplication) Implements System.Web.IHttpModule.Init 
     AddHandler context.BeginRequest, AddressOf context_BeginRequest 
    End Sub 

    Private Sub context_BeginRequest(ByVal sender As Object, ByVal e As EventArgs) 
     Dim objApp As HttpApplication = DirectCast(sender, HttpApplication) 

     If objApp.Request.Url.Host <> ConfigurationManager.AppSettings("AcceptedHostName") Then 
      objApp.Response.Clear() 
      objApp.Response.StatusCode = 403 
      objApp.Response.SubStatusCode = 6 
      objApp.Response.Flush() 
     End If 
    End Sub 
End Class 

Web.config文件:

<configuration> 
    <appSettings> 
     <add key="AcceptedHostName" value="www.domain.com"/> 
    </appSettings> 
    <system.webServer> 
     <modules> 
      <add name="HostNameCheck" type="HostNameCheck"/> 
     </modules> 
    </system.webServer> 
</configuration> 
+0

+1爲IHttpModule做事的方式。如果程序員無法訪問IIS管理器,那麼這可能是他們的最後選擇。 – NotMe

+0

我想標記2個正確答案。太好了。 – fravelgue

相關問題