nginx real_ip && deny 协作
1. 没有 real_ip 模块时
-
Nginx 拿到的客户端 IP = 直接和它建立 TCP 连接的 IP。
-
如果前面有 负载均衡 / 代理 / CDN,那 nginx 看到的就是这些代理的内网 IP。
-
这时
deny针对的就是 代理的 IP,而不是用户的真实 IP。
例子:
-
nginx 看到的客户端 IP =
10.0.0.2 -
deny 1.2.3.4;不起作用,因为 nginx 根本看不到 1.2.3.4
2. 配置了 real_ip 模块后
real_ip 模块的作用就是:
-
告诉 nginx 信任哪些代理 IP(通过
set_real_ip_from) -
从请求头里(如
X-Forwarded-For、X-Real-IP)提取出真正的客户端 IP(通过real_ip_header)
配置示例:
这样:
-
nginx 识别的客户端 IP = 1.2.3.4
-
deny 1.2.3.4;就会生效
3. 总结效果
-
没配 real_ip →
deny针对的是代理/CDN 的 IP。 -
配了 real_ip →
deny针对的就是真实用户 IP。【nginx会提取出真实的客户端地址】
注意:
在 nginx 日志文件(比如 /var/log/nginx/access.log 或你提到的 /var/log/supervisor/nginx.log)里,不要直接用 vi 打开修改。原因是:
-
日志文件是由 nginx 或 supervisor 进程不断写入的。
-
vi打开后,文件会被占用或截断(尤其是你保存退出时),导致日志写入异常。
-
-
如果
vi保存时文件被清空或 inode 改变,nginx 仍然写入旧的文件句柄,而新的日志就进不去了,看起来就像“日志不再写入”。
浙公网安备 33010602011771号