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

Posted 性能、可用性、伸缩性、扩展性、安全性、可监控是网站架构最核心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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即可。
加图:
技术分享

技术分享

技术分享

技术分享

技术分享


下图为添加web服务扩展:
技术分享

技术分享

技术分享


最后测试吧。
 
 
 
 

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

 ISAPI扩展

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

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

 技术分享

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

 技术分享

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

 
 技术分享

2 ISAPI筛选器

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

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

以上是关于Nginx反向代理下IIS获取真实IP的主要内容,如果未能解决你的问题,请参考以下文章

使用nginx反向代理时,如何正确获取到用户的真实ip

nginx 反向代理和后端服务器获取真实 ip

Nginx获取反向代理真实IP和向下转发

nginx反向代理如何获取真实IP?

Nginx反向代理 Laravel获取真实IP地址(PHP)

php nginx反向代理获取真实ip的教程