Nginx使用ngx_http_realip模块获取用户真实IP实践

本文介绍了如何在Nginx中使用ngx_http_realip模块来获取用户的真实IP,通过设置set_real_ip_from、real_ip_header和real_ip_recursive参数,解析X-Real-IP和X-Forwarded-For头字段,确保从可信代理服务器获取IP。通过实验案例展示了不同配置下的行为,强调了理解业务场景和Nginx设计逻辑的重要性。
摘要由CSDN通过智能技术生成

一个典型的WEB应用拓扑如下图。
client — proxy1 — proxy2 … proxyn — web server

由于client并不直接和Web server建立TCP连接,所以WEB server无法直接获得用户的IP,而Web server往往有根据用户IP进行访问控制策略的需求。所以,一个常用的解决方案是由代理服务器添加 X-Real-IP或X-Forwarded-For HTTP头字段,把client ip传递给Web server。在Web服务器端Nginx中引入ngx_http_realip模块获取client ip。

Nginx获取cleint ip的基本处理逻辑是,启用realip模块后将根据上游代理服务器传递过来的X-Real-IP、X-Forwarded-For(XFF)的值替换变量$remote_addr。【原$remote_addr是和nginx直接TCP连接的反向代理或CDN的IP】后继再根据$remote_addr施加访问控制,如限流限速等。而原始$remote_addr$remote_port则保存在$realip_remote_addr$realip_remote_port中。

注:nginx缺省未使能realip模块,需要在编译时添加该模块,如:

./configure --with-http_realip_module

实验环境1:
client ---- server
192.168.31.21 【客户机】 192.168.31.133
192.168.31.133【本机】 192.168.31.133

核心配置:

server {
   
    listen       80;
    server_name  test;

    root html;

    access_log  logs/50_access.log  main;

    #set_real_ip_from 192.168.31.133;
    set_real_ip_from 192.168.31.0/24;
    #set_real_ip_from 4.4.4.0/24;
    #set_real_ip_from 3.3.3.0/24;                                              
    #set_real_ip_from james;
    #real_ip_header X-Real-IP;  
    real_ip_header X-Forwarded-For;
    #real_ip_recursive off;
    real_ip_recursive on;

    location / {
   
        return 200 "Client real IP:`$remote_addr,$realip_remote_addr`\n";
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值