网站首页 > 精选教程 正文
网站启用 CDN 后 Nginx 日志里的访客 IP 会变成 CDN 的,需要借助 http_realip_module 这个模块,通过 HTTP 标头里的 X_FORWARDED_FOR 字段获取访客真实 IP。本文主要介绍使用腾讯云CDN后如何获取Nginx服务的真实IP地址,以下是具体配置方法。
Nginx服务使用阿里云CDN后,用户访问的IP地址不真实,怎样获取真实的IP地址。在Nginx服务的配置文件内location配置项添加如下内容,就可以获取到Nginx服务的真实IP地址。
检查 http_realip_module 是否已安装
nginx -V 2>&1 | tr ' ' '/n' | grep 'http_realip_module'
如果有输出结果就表示已安装。通常这个模块作为内置模块安装。
创建 CDN IP 列表配置文件
手动创建方法
vi /etc/nginx/conf.d/http_realip.conf
内容如下。
set_real_ip_from 173.245.48.0/20;
...
set_real_ip_from 2400:cb00::/32;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
参数说明:
- set_real_ip_from :可信 CDN 来源 IP。如果有多个,则多行添加;
- real_ip_header :带有访客 IP 信息的 Header 字段名称;
- real_ip_recursive :排除已配置的 CDN IP(即其它 IP 认为访客 IP);
编辑 /etc/nginx/nginx.conf 配置文件,在 http{...} 中加入引用参数。
注:通过 DNF 或 YUM 安装的 Nginx,可跳过这个步骤,因为 Nginx 配置文件已设置默认引用 /etc/nginx/conf.d 目录下的 *.conf 文件。
include /etc/nginx/conf.d/http_realip.conf;
之后刷新 Nginx 服务生效。
nginx -s reload
自动创建方法
为避免 CDN IP 变化后需要手动更新的麻烦,可以使用 Shell 脚本自动生成配置文件,并设置定时更新。
1. 创建 Shell 脚本
vi /etc/nginx/conf.d/http_realip.sh
2. Shell 脚本内容(CloudFlare 版)
#!/usr/bin/env bash
echo "# Restoring original visitor IPs" > /etc/nginx/conf.d/http_realip.conf;
for i in `curl https://www.cloudflare.com/ips-v4`; do
echo "set_real_ip_from $i;" >> /etc/nginx/conf.d/http_realip.conf;
done
for i in `curl https://www.cloudflare.com/ips-v6`; do
echo "set_real_ip_from $i;" >> /etc/nginx/conf.d/http_realip.conf;
done
echo "real_ip_header X-Forwarded-For;" >> /etc/nginx/conf.d/http_realip.conf;
echo "real_ip_recursive on;" >> /etc/nginx/conf.d/http_realip.conf;
nginx -s reload
3. 赋予可执行权限
chmod +x /etc/nginx/conf.d/http_realip.sh
4. 使用 crontab -e 命令添加定时任务,内容如下(每月 1 号凌晨 5 点 30 运行更新)
30 5 1 * * /etc/nginx/conf.d/http_realip.sh 2>&1 > /dev/null
5. 编辑 /etc/nginx/nginx.conf 配置文件,在 http{...} 中加入引用参数。
注:通过 DNF 或 YUM 安装的 Nginx,可跳过这个步骤,因为 Nginx 配置文件已设置默认引用 /etc/nginx/conf.d 目录下的 *.conf 文件。
include /etc/nginx/conf.d/http_realip.conf;
6. 手动运行一次脚本,以生成配置文件,并刷新 Nginx 服务生效。
/etc/nginx/conf.d/http_realip.sh
刷新网站检查访客 IP 是否获取正常
刷新网站,查看访问日志里的 IP 是否是访客 IP(具体日志文件路径见站点配置文件)。
tail /var/www/log/example.com.access.log
猜你喜欢
- 2024-09-24 基于IP地址来申请HTTPS证书
- 2024-09-24 从Apache apisix日志中获取客户端ip
- 2024-09-24 哎,我早就料到你获取IP地址的姿势不对啦!
- 2024-09-24 如何解决ELB和nginx配合使用时无法获取客户端真实IP的问题?
- 2024-09-24 Nginx的Http请求11个阶段之postread阶段:获取真实客户端地址的
- 2024-09-24 负载均衡获得真实源IP的6种方法
- 2024-09-24 java 游戏服务器框架 ioGame 17.1.54 netty nginx 代理获取用户真实ip
- 2024-09-24 IIS 7、8启用nginx代理后日志中获取访客真实IP方法
- 2024-09-24 CDN代理服务器获取访问者真实IP(建议收藏)
- 2024-09-24 Java获取请求者的真实IP地址
你 发表评论:
欢迎- 最近发表
-
- java 服务之间调用(rpc)(java实现服务器)
- Java机器学习库(Java ML)(二、聚类)
- 「Java库」如何使用优秀的加密库Jasypt来保护你的敏感信息?
- GitHub精选 | 轻量级Android和Java日志库
- Java面试官:MySQL binlog 有什么作用?主从延迟的了解么?
- Excel函数核武器库:50个高频场景公式——第二弹
- Excel函数核武器库:50个高频场景公式——第一弹
- Spring Cache高性能缓存库 - Caffeine简介
- Java通过Kafka Streams库来实现数据流处理
- 一连问了好几个大佬,竟然都不知道Redis为什么默认16个数据库?
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)