020_nginx禁止ip默认参数是$remote_addr无法禁止真实ip的问题
由于网站使用了cdn所以$remote_addr获取的ip是cdn的ip,我现在先禁止某些ip访问发现无法禁止cdn传递过来的客户端的ip也就是$http_x_forwarded_for这个参数。
比如我的日志格式这样的:
log_format main '$http_x_forwarded_for $remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$upstream_addr" up:$upstream_response_time-$request_time $upstream_http_content_length';
记录的日志:
140.207.197.63 10.1.60.250 - - [20/Aug/2015:17:18:39 +0800] "HEAD / HTTP/1.1" 403 0 "-" "Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322) 360JK yunjiankong 329117" "10.1.60.151:8080" up:0.006-0.231 14393
我想拒绝所有只允许140.207.197.63这个ip访问
allow 10.1.60.0/24;
allow 140.207.197.63;
deny all;
但是140.207.197.63访问却是403,10.1.60.0/24这个内网里面的ip访问却是正常的,于是乎发现nginx默认禁止的是$remote_addr参数而不是$http_x_forwarded_for。
那就想办法把cdn传递过来的真是ip变量$http_x_forwarded_for传递给$remote_addr,那就用到了这个模块--with-http_realip_module,编译安装的时候要启用。加上下面两个参数:
set_real_ip_from 10.1.60.250;
real_ip_header X-Forwarded-For;
意思就是所有来自10.1.60.250请求的header字段都改成X-Forwarded-For。这样就把真实ip传递给$remote_addr变量了。
它就是把x_forwarded_for设为remote_addr,而nginx里的x_forwarded_for取的就是其中第一个IP。
使用这些设置就能保证你的remote_addr里设定的一直都是客户端的真实IP。
然后再次访问:
140.207.197.63 10.1.60.250 - - [20/Aug/2015:17:18:39 +0800] "HEAD / HTTP/1.1" 200 0 "-" "Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322) 360JK yunjiankong 329117" "10.1.60.151:8080" up:0.006-0.231 14393
020_nginx禁止ip默认参数是$remote_addr无法禁止真实ip的问题的更多相关文章
- nginx禁止ip默认参数是$remote_addr无法禁止真实ip的问题
由于网站使用了cdn所以$remote_addr获取的ip是cdn的ip,我现在先禁止某些ip访问发现无法禁止cdn传递过来的客户端的ip也就是$http_x_forwarded_for这个参数.比如 ...
- PHP获取客户端的IP、地理信息、浏览器、本地真实IP
<?php header("Content-type:text/html;charset=utf-8"); // 作用获取客户端的ip.地理信息.浏览器.本地真实IP cla ...
- 深入浅出ES6(五):不定参数和默认参数
作者 Jason Orendorff github主页 https://github.com/jorendorff 不定参数 我们通常使用可变参函数来构造API,可变参函数可接受任意数量的参数.例 ...
- 深入浅出ES6:不定参数和默认参数
不定参数 我们通常使用可变参函数来构造API,可变参函数可接受任意数量的参数.例如,String.prototype.concat方法就可以接受任意数量的字符串参数.ES6提供了一种编写可变参函数的新 ...
- 关于CDN下查找网站真实ip
关于CDN下查找网站真实ip From t00ls.net -----雨苁收集 杂乱无章,自己慢慢看,有问题加Q2359795780~~~~~~噗 先来几张t00lslogo ...
- 阿里云SLB后Nginx、Tomcat获取真实IP
一.SLB后Nginx如何获取真实IP 前提:nginx作为slb获取真实ip是使用 http_realip_module,默认一键安装包安装的nginx没有安装这个模块需要重新重新编译nginx并加 ...
- Nginx 内置变量,细化规则,真实IP获取及限制连接请求
希望下周测试之后能用起来!!!感觉很有用的. http://www.bzfshop.net/article/176.html http://www.cr173.com/html/19761_1.htm ...
- 服务器受到网络攻击时,如何获取请求客户端的真实 IP?
网络攻击 前不久公司遭受了一次网络攻击. 早晨刚到公司,就发现登录接口的调用次数飙升,很快就确认是被恶意攻击,让安全部门做网关入口针对对方 IP 加了限制. 并统一对所有的 IP 加了调用的频率限制. ...
- nginx反向代理获取用户真实ip
nginx做反向代理时,默认的配置后端获取到的ip都是来自于nginx,如何转发用户的真实ip到后端程序呢?如是是java后端,用request.getRemoteAddr();获取到的是nginx的 ...
随机推荐
- SpringSecurity3Demo【原】
oschina git地址: https://gitee.com/KingBoBo/SpringSecurity3Demo.git
- Golang入门教程(六)关键字和数据类型
在 Go 编程语言中,数据类型用于声明函数和变量. 数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存. 一.25个关键字 二.18 ...
- Socket编程 (一)
<<Linux 网络编程>>摘要 注意: 其中的大部分成员是网络字节序(大端字节序); 编程: 服务器先要做的事情: socket() 初始化Socket bind() 绑定本 ...
- Java入门系列 泛型
前言 <Java编程思想>第四版足足用了75页来讲泛型——厚厚的一沓内容,很容易让人头大——但其实根本不用这么多,只需要一句话:我是一个泛型队列,狗可以站进来,猫也可以站进来,但最好不要既 ...
- 今天终于想明白为什么java包要倒着写
比如 com.baidu.video,因为java内部实际上是以文件夹形式存在的,是按com,baidu,video依次生成文件夹的具体功能的是子文件夹,所以要倒着写.
- Quartz.NET 配置文件详解
Ø 前言 在之前的 使用 Topshelf 结合 Quartz.NET 创建 Windows 服务 文章中,使用到了 Quartz 的两个配置文件 quartz.config 和 quartz_jo ...
- python中执行py文件出错(提示File “<stdin>”,line 1,SyntaxError:invalid syntax)
解决办法: 上图中已通过输入python进入了python运行环境,出现>>>时候的不能再用python z.py 来运行hello.py文件: 应该通过exit()退出当前pyth ...
- SpringBoot学习笔记<一>入门与基本配置
毕业实习项目技术学习笔记 参考文献 学习视频 2小时学会Spring Boot:https://www.imooc.com/learn/767 学习资料 SpringBoot入门:https://bl ...
- jq的dom操作
代码可以在该网址测试:www.w3school.com.cn/tiy/t.asp?f=jquery_manipulation_detach_move attr 使用函数来设置属性/值:函数参数为选择器 ...
- zabbix系列 ~ 报警模式
一 简介:聊聊zabbix的报警方式二 报警方式 邮件,短信,钉钉,微信三 准备 需要预选准备好对应报警方式的脚本四 web端设置 1 设置报警方式 2 设置报警触发器 1 选择报警信息 ...