Nginx反向代理下IIS获取真实IP

时间:2023-03-09 06:07:38
Nginx反向代理下IIS获取真实IP

1.  iis 如果放在反向代理后面,日志里的c-ip是反向代理服务器的ip,不是真正用户的ip,想要记录用户的ip要做两件事。
  一。在反向代理设置X-Forwarded-For段,以下为nginx下的配置示例:
  server
  {
  location
  {
  ……
  proxy_set_header

 
X-Forwarded-For  $proxy_add_x_forwarded_for;
  ……
  }
  }
  二。在iis站点上安装下面这个isapi
filter,这东西是在f5的开发论坛上找到的,按开发者的话说,是为了解决iis放在f5后记录不到用户ip的问题,-_-#
管他前端是f5还是nginx还是squid还是haproxy。都可以用。应该不错。装完之后重启下iis就搞定了。
 http://devcentral.f5.com/weblogs/Joe/archive/2009/08/19/x_forwarded_for_log_filter_for_windows_servers.aspx

  回头看下iis的日志,里面的c-ip已经是用户端的ip了。

2.此dll文件的安装使用方法:有IIS站点的右键属性下,打开ISAPI筛选器,添加下载的dll文件,记住下载下来的文件有两个,一个是x86,一个是x64,分别对应32位和64位,并且都有F5XForwardedFor.dll两个版本,即正式版本和开发版本,应该选择用Release正式稳定版本的。 
如果添加完后加载不成功,可以尝试在web服务扩展中添加服务扩展,将F5XForwardedFor.dll添加到服务扩展中,设置其状态为启用。最后重启iis即可。

加图:
Nginx反向代理下IIS获取真实IP

Nginx反向代理下IIS获取真实IP

Nginx反向代理下IIS获取真实IP

Nginx反向代理下IIS获取真实IP

Nginx反向代理下IIS获取真实IP

下图为添加web服务扩展:
Nginx反向代理下IIS获取真实IP

Nginx反向代理下IIS获取真实IP

Nginx反向代理下IIS获取真实IP

最后测试吧。

在IIS的文档中经常会提到两个术语:ISAPI扩展和ISAPI筛选器。

ISAPI扩展

ISAPI扩展(ISAPI Extension”是一种可以添加到IIS中以增强Web服务器功能的程序,其载体为DLL文件。通常直接负责响应HTTP请求

根据HTTP请求要访问的资源扩展名(通过URL获取),IIS会选取特定的ISAPI扩展来处理这一请求,这一过程被称为“程序映射”。 而用于响应HTTP请求的被称为“HTTP Handler(HTTP处理程序)”。 图 8‑11展示了IIS 6中的程序映射。

Nginx反向代理下IIS获取真实IP

在图 8‑11中可以看到,IIS指定对ASP.NET网页(其扩展名为.aspx)的请求将由aspnet_isapi.dll处理(图 8‑12)。

Nginx反向代理下IIS获取真实IP

IIS 7中的程序映射与IIS 6略有不同。当IIS 7以“经典模式”运行时,与IIS 6一样使用aspnet_isapi.dll响应针对“.aspx”的请求。但当IIS 7以“集成模式”运行时,则使用托管处理程序(System.Web.UI.PageHandlerFactory)响应针对“.aspx”的请求(图 8‑13)。

Nginx反向代理下IIS获取真实IP

2 ISAPI筛选器

       “ISAPI筛选器(ISAPI Filter)也是一种DLL但不负责处理HTTP请求,主要作用是响应某些特定的事件。当这些事件发生时ISAPI筛选器被调用,它可以修改传入或传出的HTTP数据。在IIS 7中,使用“HTTP模块(HTTP Module)取代了传统ISAPI筛选器的功能。

注意:ISAPI扩展与ISAPI筛选器名字很相近,但其在IIS中的地位和所起的作用是不同的。