使用 CDN 后 Apache 的日志记录客户真实 IP

经常搭建网站服务器的都知道,在给站点使用了 CDN 后 Web 应用的日志记录里就会只记录 CDN 节点 IP 了,这就没法看到真实客户请求 IP,对于日志分析、运维日常维护来说就有点儿麻烦了,今天明月结合在五洛云服务器上搭建的Apache环境给大家分享一下让日志记录客户真实 IP,毕竟网上的教程很多都是 Nginx 的并且还没法通用。

五洛云服务器的站点使用 CDN 后 Apache 的日志记录客户真实 IP

有关 Nginx 相关的大家可以参考往期文章【使用上海云盾 CDN 和 CloudFlare 后 Nginx、 WordPress、 Typecho 获取访客真实 IP 方法】一文,Apache下还是跟 Nginx 小有区别的。因为从 Apache 2.4 版开始自带了mod_remoteip 模块,就算你用的是宝塔面板,默认安装也都是 2.4.X 版本了,所以本文几乎不限制你的生产环境。

五洛云服务器的站点使用 CDN 后 Apache 的日志记录客户真实 IP

宝塔面板默认安装 Apache 的版本截图

我们要做的就是确认当前的 Apache 是否已经启用了mod_remoteip模块,一般只需要查看 Apache 默认主配置文件http.conf里是否有如下这个模块的加载语句即可:

LoadModule remoteip_module modules/mod_remoteip.so

宝塔面板里 Apache 的主配置文件位置在/www/server/apache/conf/http.conf,大家直接在文件里找到这个文件双击编辑查看就是了。如果已经载入这个模块就进行下一步,否则就要修改为加载这个模块(去掉注释),然后重启一下 Apache 即可。

然后,我们还要在 Apache 扩展配置目录(/www/server/apache/conf/extra/)里修改mod_remoteip.conf文件内容使用 RemoteIPProxiesHeader 从指定字段获取信任 CDN IP(一般 CDN 都会支持的),这样不用设置指定代理 IP(CDN 节点 IP),如下:

RemoteIPHeader X-Forwarded-For
RemoteIPProxiesHeader X-Forwarded-By

最后再在http.conf文件结尾引用这个mod_remoteip.conf文件,如下:

Include /www/server/apache/conf/extra/mod_remoteip.conf

再继续修改http.conf文件里记录日志格式,使之记录访客 IP,搜索下面两行内容:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common

将里面的 %h 改为 %a(完整格式选项可查看此文档),修改后的内容如下:

LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%a %l %u %t \"%r\" %>s %b" common

保存退出,重启 Apache 后,再去看网站日志是不是访客真实 IP 就有了,不再是 CDN 的节点 IP 了都。

五洛云服务器的站点使用 CDN 后 Apache 的日志记录客户真实 IP

如果你使用的 CDN 不是融合 CDN,而是独立 CDN 的话,如:CloudFlare,这类 CDN 服务商都会给你提供详细准确的 CDN 节点 IP 的,从安全角度来说这种 CDN 才是真正安全、靠谱、实力雄厚的 CDN,我们可以直接修改mod_remoteip.conf文件加上 CDN 节点 IP 地址段(多个以英文空格隔开),如下:

RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 173.245.48.0/20 103.21.244.0/22 103.22.200.0/22 103.31.4.0/22 141.101.64.0/18 108.162.192.0/18 190.93.240.0/20 188.114.96.0/20 197.234.240.0/22 198.41.128.0/17 162.158.0.0/15 104.16.0.0/13 104.24.0.0/14 172.64.0.0/13 131.0.72.0/22

如此修改后保存,重启 Apache 就可以了,此法仅限非融合 CDN 哦,也就是给你提供 CDN 节点 IP 的时候再用就是了。

最后明月提醒大家开启网站日志是个很好的运维习惯,一旦出现任何问题都可以借助日志找到根源和解决应对办法的,关闭日志记录就算是运维高手也没办法给你快速解决问题,基本都是盲猜了!放心,开启日志占用不了多少存储空间的,再说还可以定时自动的切割日志呢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/57175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索C嘎嘎:模版初阶

前言: 小编在前文讲述了C的内存管理,下面我们来开始继续探索C,开启C又一个重要的内容,模版初阶的详解,代码时间到! 目录 1.泛型编程 1.1.引子 1.2.泛型编程 2.函数模版 2.1.函数模版的概念 2.2.函数模版的格…

基于知识图谱的电子元器件问答系统

你还在为寻找电子元器件的相关信息头疼吗?作为一名程序员或电子工程师,在项目中经常需要快速查询电子元件的属性或关联关系。今天给大家介绍一个可以大大提升工作效率的神器——基于知识图谱的电子元器件问答系统。这不仅是你学习和工作的好帮手&#xf…

解读华为云Kuasar多沙箱容器技术,带来更强隔离性和安全性

摘要:沙箱技术的引入,为容器提供了更强的隔离性和安全性,成为云原生技术的重要组成部分。 本文来源 《华为云DTSE》第五期开源专刊,作者:华为云云原生开源团队研发工程师。 近年来,云原生容器技术飞速发展&…

详解Java之异常

目录 防御式编程 捕获异常 基础语法 示例1 【不处理异常】 示例2 【使用try catch捕获异常】 示例3 【catch只能处理对应的异常】 示例4 【catch可以有多个】 示例5 【可以用一个catch捕获所有异常】 示例6 【finally一定会执行】 示例7 【使用try回收资源】 示例8 …

鸿蒙网络编程系列24-Web组件与应用互操作示例

1. APP内嵌网页与应用互操作概述 在通常的APP开发中,经常会采用内嵌网页的形式,通过网页来展现丰富的动态内容,虽少了很多原生开发的功能,但是这么做无可厚非,毕竟APP需要适配的系统平台很多,比如安卓、苹…

【HarmonyOS NEXT】权限申请及应用设置页跳转

关键词:鸿蒙、程序访问控制、定位、应用详情页、startability、want 在app开发过程中,常进行系统权限的申请以提供设备访问或个性化功能(如扫一扫、城市定位、剪贴板等),从而保障应用功能的完整性,那么本期…

Jupyter notebook和Conda使用

Jupyter notebook和Conda使用 文章目录 Jupyter notebook和Conda使用AnacondaJupyter notebook简介页面使用技巧编写格式自动补全查看函数文档魔术命令远程访问交互式 Anaconda Anaconda是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项…

stm32实现esp8266连接到TCP服务器(二)未完

1.2 连接到TCP Server 1.2.1 使用网络助手,设立TCP服务器 ​ 编辑 1.2.2 连接服务器 ATCIPSTART"TCP","192.168.1.18",8080 //指令,注意双引号逗号都要半角(英文)输入 CONNECT //结果:成功 OK //结果:成功 …

jmeter中用csv data set config做参数化2

在jmeter中,使用csv data set config进行参数化是很重要的一个功能,但是这个功能的使用需要十分仔细和小心,因为细节之处往往决定着结果的正确与否。 举例: 一个登录接口用加密密码登录,一个登录接口用原始密码登录。…

STM32G4系列MCU的低功耗模式介绍

目录 概述 1 认识低功耗模式 1.1 低功耗模式的应用 1.2 低功耗模式介绍 2 低功耗模式的状态关系 2.1 低功耗模式可能的转换状态图 2.2 低功耗模式总结 3 运行模式 3.1 减慢系统时钟 3.2 外围时钟门控 3.3 低功耗运行模式(LP运行) 概述 本文主…

JavaFx学习--chapter02(网络对话)

chapter02(网络对话) 简单网络对话程序 设计任务:客户端向服务器发送字符串,并能读取服务器返回的字符串。 知识点:TCP套接字技术,C/S软件架构程序设计 重点理解:Java客户套接字类Socket和服务器套接字类ServerSoc…

蜜罐技术的出现究竟影响了什么

自网络诞生以来,攻击威胁事件层出不穷,网络攻防对抗已成为信息时代背景下的无硝烟战争。然而,传统的网络防御技术如防火墙、入侵检测技术等都是一种敌暗我明的被动防御,难以有效应对攻击者随时随地发起的无处不在的攻击和威胁。蜜…

linux线程 | 同步与互斥 | 互斥(下)

前言:本篇文章主要讲述linux线程的互斥的知识。 讲解流程为先讲解锁的工作原理, 再自己封装一下锁并且使用一下。 做完这些就要输出一堆理论性的东西, 但博主会总结两条结论!!最后就是讲一下死锁。 那么, 废…

什么是 Idempotence 以及它在哪里使用?

大家好,我是锋哥。今天分享关于【什么是 Idempotence 以及它在哪里使用?】面试题?希望对大家有帮助; 什么是 Idempotence 以及它在哪里使用? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Idempotence&am…

【C++STL】list的基本介绍与使用方式

✨ Blog’s 主页: 白乐天_ξ( ✿>◡❛) 🌈 个人Motto:他强任他强,清风拂山冈! 🔥 所属专栏:C深入学习笔记 💫 欢迎来到我的学习笔记! 一、list的介绍 文档内容以及大致翻…

ESP32-IDF 非易失存储 NVS

目录 零、前言一、基本介绍1、配置结构体1.1 nvs_entry_info_t 2、常用 API2.1 nvs_flash_init2.2 nvs_flash_init_partition2.3 nvs_flash_init_partition_ptr2.4 nvs_flash_erase2.5 nvs_flash_erase_partition2.6 nvs_flash_erase_partition_ptr2.7 nvs_flash_generate_keys…

element plus中menu菜单技巧

我在使用element plus的menu(侧边栏)组件的过程中遇到了一些问题,就是menu编写样式和路由跳转,下面给大家分享以下,我是怎么解决的。 1.页面效果 我要实现的网站布局是这样的: 侧边栏折叠以后的效果&#…

python爬虫快速入门之---Scrapy 从入门到包吃包住

python爬虫快速入门之—Scrapy 从入门到包吃包住 文章目录 python爬虫快速入门之---Scrapy 从入门到包吃包住一、scrapy简介1.1、scrapy是什么?1.2、Scrapy 的特点1.3、Scrapy 的主要组件1.4、Scrapy 工作流程1.5、scrapy的安装 二、scrapy项目快速入门2.1、scrapy项目快速创建…

详解equals底层原理

equals 方法是 Java 中用于比较两个对象是否“相等”的方法。在 Java 中,每个类都继承自 java.lang.Object 类,而 equals 方法正是定义在 Object 类中的一个方法。默认情况下,Object 类的 equals 方法比较的是两个对象的内存地址(…

SQL 多表联查

SQL JOIN (w3school.com.cn) SQL join用于根据两个或多个表中的列之间的关系,从这些表中查询数据。 之前跟着老师学数据库的时候学过,最近又在比较频繁的使用,再复习一下。 Person表: Id_P :居民编号。主键 …