在 Windows Azure 网站中配置动态 IP 地址限制
我们最近对 Windows Azure 网站进行了升级,并启用了IIS8的动态 IP 限制模块。现在,开发人员可以为其网站启用并配置动态 IP 限制功能(或简称 DIPR)。
可以通过以下链接查看此 IIS8 功能的完整概述:
http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-dynamic-ip-address-restrictions
DIPR 功能主要为开发人员提供两种保护:
· 根据并发请求数阻止 IP 地址
· 根据某一时段的请求数阻止 IP 地址
此外,开发人员还可以配置 DIPR 的行为,例如,针对被阻止的请求, 发回的HTTP 状态代码的类型。
在 Azure 网站中,开发人员可以使用添加到 web.config 文件(位于该网站的根文件夹)中的配置部分来配置 DIPR。
如果您要根据并发请求数(即任意时刻正在发出的活动请求数)来阻止连接,请向该网站的 web.config 文件添加以下配置段。

如果在 denyByConcurrentRequests 元素中将enabled 属性设置为
true,则在最多并发请求数超过 maxConcurrentRequests 属性中设置的值(在以上示例中设置为 10)时,IIS 将自动开始阻止该 IP 地址的请求。
另一方面,如果您要根据特定时间窗口内发出的请求总数阻止连接,则可以使用以下配置段:

在以上示例中,如果在 denyByRequestRate 元素中将enabled 属性设置为
true,则会指示 IIS 在 requestIntervalInMilliseconds 定义的时间窗口(在此示例中设置为 2000 毫秒)内观察到的请求总数超过maxRequests 属性中设置的值(在此示例中设置为 10)时阻止该 IP 地址的请求。因此,在 2 秒的时间段内发出 10 个以上请求的客户端将被阻止。
最后,开发人员还可以选择同时启用这两种阻止机制。以下代码段既可指示 DIPR 阻止并发请求数超过 10 个的客户端,也可指示 DIPR 阻止在 5 秒时间窗口内总共发出 20 个以上请求的客户端:

在 DIPR 阻止某个 IP 地址后,该地址会一直保持阻止状态,直到当前时间窗口结束为止,之后,该 IP 地址将再次能够向该网站发出请求。例如,如果requestIntervalInMilliseconds
设置为 5000(5 秒),而某个 IP 地址在 2 秒刻度处被阻止,则该地址在剩下 3 秒(即,当前时间窗口内的剩余时间)内会一直保持阻止状态。
开发人员可以自定义客户端被阻止时返回的错误,方法为配置 dynamicIpSecurity元素自身的
denyAction 属性。denyAction 的允许值包括:
· AbortRequest(返回 HTTP 状态代码 0)
· Unauthorized(返回 HTTP 状态代码 401)
· Forbidden(返回 HTTP 状态代码 403)。请注意,这是默认设置。
· NotFound(返回 HTTP 状态代码 404)
例如,如果您要发送 404 状态代码,而不是发送默认代码(即 Forbidden 403),则可使用以下配置:

这里,我们会遇到这样一个问题:在 Azure 网站中运行时,DIPR 会看到什么 IP 地址?在 Windows Azure 中运行意味着 Web 应用程序正在使用多种负载平衡器。也就是说,呈现给该网站的客户端 IP 地址可能是上游负载平衡器的地址,而不是 Internet 上实际客户端的地址。但是,Azure 网站将为您自动执行必要的转换,确保 DIPR 模块“看到的”客户端 IP 地址是发出 HTTP 请求的 Internet
客户端的实际 IP 地址。
本文翻译自:
在 Windows Azure 网站中配置动态 IP 地址限制的更多相关文章
- 进一步探索:Windows Azure 网站中解锁的配置选项
编辑人员注释: 本文章由 Windows Azure 网站团队的项目经理 Erez Benari 撰写. 在 Windows Azure 网站 (WAWS) 中管理网站时,许多选项可使用 Azu ...
- 在 Windows Azure 网站中进行纵向扩展和横向扩展
编辑人员注释:本文章由 Windows Azure 网站团队的项目经理 Byron Tardif 撰写. 当您开始一个新的 Web 项目,或者刚刚开始开发一般的网站和应用程序时,您可能希望从小处着手. ...
- 探索 Windows Azure 网站中的自动伸缩功能
去年10月,我们发布了若干针对 WindowsAzure平台的更新,其中一项更新是添加了基于日期的自动伸缩调度支持(在不同的日期设置不同的规则). 在这篇博客文章中,我们将了解自动伸缩的概念,并 ...
- 禁用 Windows Azure 网站中的 ARR 实例关联
编辑人员注释: 本博客文章由 Windows Azure 网站团队的项目经理 Erez Benari 撰写. 在 Windows Azure 网站中设置网站的多个实例是横向扩展网站的绝佳方式,Azur ...
- 如何在Ubuntu Server 18.04 LTS中配置静态IP地址
安装Ubuntu Server 18.04后需要分配一个的静态IP地址.先前的LTS版本Ubuntu 16.04使用/etc/network/interfaces文件配置静态IP地址,但是Ubuntu ...
- Python练习:爬虫练习,从一个提供免费代理的网站中爬取IP地址信息
西刺代理,http://www.xicidaili.com/,提供免费代理的IP,是爬虫程序的目标网站. 开始写程序 import urllib.requestimport re def open_u ...
- Windows Azure 网站的 IP 和域限制
编辑人员注释:本文章由 Windows Azure 网站团队的首席项目经理 Stefan Schackow 撰写. 配置 Azure 网站 (WAWS) 的 IP 和域限制一直是用户最迫切希望我们提供 ...
- Windows Azure 网站上的 WebSocket 简介
编辑人员注释:本文章由 Windows Azure 网站团队的首席项目经理 Stefan Schackow 撰写. Windows Azure 网站最近新增了对 WebSocket 协议的支持..NE ...
- Windows Azure 网站:应用程序字符串和连接字符串的工作原理
编辑人员注释:本文章由 Windows Azure 网站团队的首席项目经理 Stefan Schackow 撰写. Windows Azure 网站上有一个方便的功能,即开发人员可将 Azure 中的 ...
随机推荐
- 解决SVN:could not start external diff program的问题。
今天装完SVN之后,用来查看文件不同老是出现could not start external diff program,网上找了很多资料也没找到自己想要的,无意中中右键 Settings看到有个Dif ...
- js解决click事件点击事件间隔方法
var myTimeout = null; $("#id").click(function(){ clearTimeout(myTimeout); myTimeout = setT ...
- Javascript 字符串浏览器兼容问题
先看下不兼容的写法,若我想获取某个字符串的第几位 var str='aavvvcc'; console.info(str[0]); 这种写法 在IE 7以下的浏览器都不兼容,以下提供浏览器全兼容的方式 ...
- Struts2部分标签
由于Struts多用OGNL语言所以使用给类标签之前需引入<%@taglib prefix="s" uri="/struts-tags"%> 1.f ...
- 动态Script标签 解决跨域问题
动态Script 解决跨域问题 1.动态创建scriptcreateScript : function(src){ var varScript = document.createElement(&q ...
- PHP判断图片是否存在和jquery中load事件对图片的处理
在公司的图片服务器中,同一个产品一般会存在对应的大图和缩略图.因此,我们在开发手机端的web网站时,默认使用的是产品图片的缩略图,查询数据库时获取的是缩略图的路径.但是,不知什么原因,时不时的,测试的 ...
- 获取IP地址(简单实现)
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket ...
- Python自动化环境搭建
安装配置 Eclipse + PyDev + Robotframework 集成开发环境 1.安装JDK安装目录下的jdk-7u17-windows-i586.exe文件(JAVA开发.运行环境)安装 ...
- J2SE知识点摘记(二十五)
Set 1.5.1 概述 Java 中的Set和正好和数学上直观的集(set)的概念是相同的.Set最大的特性就是不允许在其中存放的元素是重复的.根据这个特点,我们就可以使用Set 这个 ...
- Android学习笔记:利用httpclient和AsyncTask 发起网络http post操作
1.在android4中,发起网络http操作,不能在Activity的事件(即主线程)中进行,必须在单独的线程中操作. 另外进行网络操作,需要在manifest文件中增加如下的权限: <use ...