转自:http://blog.itpub.net/27043155/viewspace-734234/

通过这个模块允许我们改变客户端请求头中客户端IP地址值(例如,X-Real-IP 或 X-Forwarded-For)。

如果Nginx工作在某些7层负载均衡代理后面,这个功能对于Nginx服务器非常有用,由于客户端请求的本地IP(就是客户端的请求地址)在通过7层代理时被添加了客户端IP地址头,因此才使得后端的Nginx能够取得震慑客户端的IP地址值。该模块在默认安装是并没有安装,因此如果要使用该模块,那么在编译安装是需要添加--with-http_realip_module选项。

为什么使用该模块,它的意义在于能够使得后台服务器记录原始客户端的IP地址。

配置示例

set_real_ip_from   192.168.1.0/24;

set_real_ip_from   192.168.2.1;

real_ip_header     X-Real-IP;

指    令

该模块仅提供了两条指令。

指令名称:set_real_ip_from

功    能:通过该指令指定信任的地址,将会被替代为精确的IP地址。从0.8.22版本后也可以使用信任的Unix套接字。这里设置的IP就是指前端Nginx 、Varnish或者 Squid 的 IP地址。

语    法: set_real_ip_from [the address|CIDR|"unix:"]

默 认 值: none

使用环境: http, server, location

指令名称:real_ip_header

功    能:这个指令用于设置使用哪个头来替换IP地址。如果使用了X-Forwarded-For,那么该模块将会使用X-Forwarded-For头中的最后一个IP地址来替换前端代理的IP地址。

语    法: real_ip_header [X-Real-IP|X-Forwarded-For]

默 认 值: real_ip_header X-Real-IP

使用环境: http, server, location

使用实例

在下面的实例中,我们环境是这样的有两台Nginx服务器,一台是前端,另一台是后端,前端的Nginx被用作代理,而后台的Nginx用于提供页面访问,还有一台客户端,IP地址如下:

前端Nginx:192.168.7.10

后端Nginx:192.168.1.15

客户端主机:218.239.201.36

前端的Nginx配置是这样的:

server {

listen       80;

server_name  www.xx.com;

location / {

root   html;

index  index.html index.htm;

charset       utf-8;

}

location  /865 {

proxy_pass   http://192.168.3.139:80/;

proxy_set_header  X-Real-IP        $remote_addr;

proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;

proxy_set_header  Host             $host;

proxy_redirect                     off;

}

……

}

后端的Nginx配置如下:

server {

listen       80;

server_name  localhost;

location / {

root   /var/www/html;

index  index.html index.htm;

}

访问测试

如果我们访问http://www.xx.com/865,没问题,可以是正常访问,访问日志如下:

前端Nginx的日志:

218.239.201.36 - - [30/Aug/2011:16:09:56 +0800] "GET /865/ HTTP/1.1" 200 151 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 GTB7.1"

后端Nginx的日志:

192.168.7.10 - - [30/Aug/2011:16:09:56 +0800] "GET // HTTP/1.0" 200 151 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 GTB7.1"

我们看到在后端Nginx的日志中并没有记录原始客户端的IP地址,而是记录了前端Nginx的IP地址。

如果将后台Nginx服务器的配置修改为:

server {

listen       80;

server_name  localhost;

  set_real_ip_from   192.168.3.0/24;

 set_real_ip_from   100.100.0.0/16;

  real_ip_header     X-Real-IP;

location / {

root   html;

index  index.html index.htm;

}

……

}

然后我们再次进行访问测试:

前端Nginx的日志:

218.239.201.36 - - [30/Aug/2011:16:10:28 +0800 "GET /865/ HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 GTB7.1"

后端Nginx的日志:

218.239.201.36 - - [30/Aug/2011:16:10:28 +0800] "GET // HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 GTB7.1"

可见,这次后台记录的是客户端的IP地址。

--with-http_realip_module选项(后台Nginx服务器记录原始客户端的IP地址 )的更多相关文章

  1. java nginx等代理或网关转发请求后获取客户端的ip地址,原理

    在没有网关或者反向代理软件情况下,java里获取客户端ip地址的方法是request.getRemoteAddr() 先解释下http协议和TCP协议: 网页默认是进行http连接了,http协议即超 ...

  2. 【Nginx】如何获取客户端真实IP、域名、协议、端口?看这一篇就够了!

    写在前面 Nginx最为最受欢迎的反向代理和负载均衡服务器,被广泛的应用于互联网项目中.这不仅仅是因为Nginx本身比较轻量,更多的是得益于Nginx的高性能特性,以及支持插件化开发,为此,很多开发者 ...

  3. haproxy 让后端服务器记录用户的真是IP地址(记录在header头里)

    这里我们在生产中遇到一个问题就是.我们有的用户会登录失败.但是并不是所有的用户登录失败(这里是能够正常访问网站) 所以这里想分析哪些用户登录失败,所以我们要记录他们这些登录失败的IP地址 这里我们的结 ...

  4. Nginx反向代理后,java获取客户端真实IP地址

    一般情况下,java获取客户端IP地址的方法为request.getRemoteAddr();但这只是在没有网关或者代理的情况下,如果客户端将请求发送到nginx,再由nginx进行反向代理到目标服务 ...

  5. 多级nginx代理,获取客户端真实ip

    今天服务里的微信公众号支付业务突然不能用了,报错为网络环境未能通过安全验证,请稍后再试.检查后端日志,没有任何问题,看来是成功创建支付订单,但是调起支付时出现了问题.上网查了一下,这个报错的直接原因是 ...

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

    使用VUE前后端分离开发 后端使用Laravel  想要获取到用户的真实IP地址 因为分离开发不同源跨域问题 所以只能进行前端Nginx反向代理 location /api { rewrite ^/a ...

  7. Linux SSH登录服务器报ECDSA host key "ip地址" for has changed and you have requested strict checking错误

    错误:ECDSA host key "ip地址" for  has changed and you have requested strict checking. 解决方案:在终端 ...

  8. sqlserver服务器名称改成本地IP地址登录

    在安装sqlserver2008.2012等时选择的是默认实例,服务器名称也就是电脑的名称,特别是登录本地的数据库,需要输入电脑用户名称加上SQLEXPRESS 例如:zhangsan\SQLEXPR ...

  9. nginx配置解析之客户端真实IP的传递

    前后端分离之后,采用nginx作为静态服务器,并通过反向代理的方式实现接口跨域的方式,在降低开发成本的同时也带来了诸多问题,例如客户端真实IP的获取. 在一些特殊场景下,比如风控和支付流程,往往需要获 ...

随机推荐

  1. EBS中配置OAF

    配置EBS的OAF作者 redqq 16:09 | 静态链接网址 | 最新回复 (0) | 引用 (0) | ERP学习 载jdev 9.03.5带Oracle Applications Extens ...

  2. 微软第四题 给定cost能遍历的最大城市数

    有向图中N*N矩阵 cost:M, 最多可以遍历的结点个数 例如A可以有0->1->2->0->1 代价:2+2+3+2=9<10 输出4 #include <io ...

  3. MySQL的索引类型和左前缀索引

    1.索引类型: 1.1B-tree索引: 注:名叫btree索引,大的方面看,都用的是平衡树,但具体的实现上,各引擎稍有不同,比如,严格的说,NDB引擎,使用的是T-tree,但是在MyISAM,In ...

  4. DataSnap修改数据ApplyUpdates出现错误:连接繁忙导致另一个命令

    最近准备尝试用DBExpress做个SQL Serer应用,在学习的时候发现一个问题使用DBExpress连接Sql server 2008 express使用以下控件SQLConnection-&g ...

  5. SQL 查询所有表名、字段名、类型、长度、存储过程、视图

    -- 获得存储过程创建语句 select o.xtype,o.name,cm.text from syscomments cm inner join sysobjects o on o.id=cm.i ...

  6. Android 二维码 生成和识别(附Demo源码)

    今天讲一下目前移动领域很常用的技术——二维码.现在大街小巷.各大网站都有二维码的踪迹,不管是IOS. Android.WP都有相关支持的软件.之前我就想了解二维码是如何工作,最近因为工作需要使用相关技 ...

  7. U盘安装WIN10专业版

    安装环境1个SSD,2个SATA盘. 安装时把2个SATA盘拔掉,并使SSD在BISO中的地位为0区的MASTER,否则安装时会出现,无法创建当前分区,和新建当前分区. 步骤:下载win10正式专业版 ...

  8. bootstrap制作搜索框及添加回车搜索事件

    下面是开发中用bootstrap制作的一个搜索框,以及给搜索框添加回车搜索事件的一个小案例. bootstrap制作搜索框及添加回车搜索事件 下面是功能实现的代码: <!DOCTYPE html ...

  9. iOS UIButton setTitle与setAttributedTitle

    今天遇到一个问题,查了好久,终于解决. 我需要根据不同的条件给uibutton赋不同的值,由于字体要求有不同颜色变化,所以我选择了一个条件下用setTitle,另一个条件下用setAttributed ...

  10. 各种Java序列化性能比较

    转载:http://www.jdon.com/concurrent/serialization.html 这里比较Java对象序列化 XML JSON  Kryo  POF等序列化性能比较. 很多人以 ...