架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8029|回复: 0

[Web] 前端nginx后端Nginx服务器记录原始客户端的IP地址

[复制链接]
发表于 2014-11-3 09:53:23 | 显示全部楼层 |阅读模式

通过这个模块允许我们改变客户端请求头中客户端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地址。







上一篇:nginx 代理模式下,获取客户端真实IP
下一篇:Discuz!X3.1 X3所有版本绕过附件下载权限免积分无限下载漏洞
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-29 04:00

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表