nginx获取代理后的真实ip并拦截访问

1、缘起

有些系统用户访问nginx之前会有CDN或WAF代理,此时nginx使用deny命令拒绝ip是行不通的。

deny 218.17.124.213

以waf为例,直接访问nginx的ip是waf的地址,通过nginx获取到的$remote_addr是waf的ip,

所以我们无法获取到客户端的一个真实ip来使用deny命令。

2、解决方案

1)如何获取客户端真实ip?

一般客户端发起请求,经过代理后,它在访问nginx时会以格式(客户端ip,代理ip1,代理ip2)被封装为一个$proxy_add_x_forwarded_for变量中

这个格式的第一个永远是客户端的真实ip,后面的分别是第一级代理的ip,第二级代理的ip。。。

2)使用nginx if命令加正则表达式和响应状态码方式实现拒绝访问

比如客户端的真实ip为 219.137.75.122,waf代理ip为 113.67.16.111 ,要限制这个客户端的访问,在经过waf代理后

# nginx中$proxy_add_x_forwarded_for的值为
219.137.75.122,113.67.16.111

最终在server块中加拦截配置

server {
    # 注意if后面和右小括号的空格,不然nginx配置文件会报错
    # 多个ip使用 | 隔开
    if ($proxy_add_x_forwarded_for ~ ^(219.137.75.122)) {
        return 403;
    }
}

刷新nginx配置

./sbin/nginx -t  # 测试配置文件是否正确
./sbin/nginx -s reload # 刷新配置文件

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值