通过 Nginx 代理实现网页内容替换

news2024/11/26 1:29:43

突发奇想,用 Nginx 代理一个网站,把网站的一些关键字替换掉,蛮有意思的。

如下图:

百度百科

一、编译安装 Nginx

一般 Nginx 中不包含 subs_filter 文本替换的模块,需要自己手动编译安装,步骤如下。

克隆 subs_filter 仓库:

git clone http://github.com/yaoweibin/ngx_http_substitutions_filter_module.git

正常下载 Nginx 源码包解压,并安装相关编译环境:

# 解压安装包
tar -zxvf nginx-1.22.1.tar.gz
# 安装编译环境
yum -y install gcc gcc-c++  pcre pcre-devel openssl openssl-devel zlib zlib-devel

预编译 Nginx,需要携带上 --with-http_sub_module 参数,并通过 --add-module 指定刚刚拉取的 subs_filter 仓库地址。

本文中仓库地址为:/root/install/ngx_http_substitutions_filter_module/

所以需要携带上关键参数:--with-http_sub_module --add-module=/root/install/ngx_http_substitutions_filter_module/

完整预编译命令如下:

./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_sub_module --with-http_v2_module --add-module=/root/install/ngx_http_substitutions_filter_module/

正常步骤安装 Nginx

# 编译并安装
make && make install
 
# 检查是否编译正确,如果返回值是 0,就是执行成功;0 以外的值,就是失败。
echo $?

# 软连接二进制文件到命令目录
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/nginx

二、配置实现

sub_filter 命令用于指定替换的文本:sub_filter $目标文本 $替换文本;

sub_filter_once 命令指定替换文本的次数,默认为 on,仅替换一次,修改为 off 可进行全文替换。

需要注意源站是否有进行 gzip 压缩,sub_filter 仅能对未压缩的网页进行替换。

server
{
    listen 80;
    listen 443 ssl http2;
    server_name vm.nineya.com;
    index index.php index.html index.htm default.php default.htm default.html;

    ...省略一堆关于https的配置...
  
    location / {
        # 需要进行字符替换的源站点
        proxy_pass http://baike.baidu.com;
        # 指定源站不要进行压缩
        proxy_set_header Accept-Encoding '';
        sub_filter_once off;
        sub_filter 马云 玖涯;
    }
 
}

三、字符替换不生效

按上面的 conf 配置,实际上是无法生效的,因为 Accept-Encoding 配置对于 baike.baidu.com 并没有生效,百度百科依旧反回了经过 gzip 压缩的内容。

该问题可通过两次代理解决,先用一次代理去除源站的 gzip 压缩,然后再用第二次代理进行文本替换。

配置参考如下:

server
{
    listen 80;
    listen 443 ssl http2;
    server_name vm.nineya.com;
    index index.php index.html index.htm default.php default.htm default.html;

    ...省略一堆关于https的配置...

    # 代理去除源站的gzip压缩
    location /test {
        gzip off;
        proxy_pass https://baike.baidu.com/;
        proxy_set_header HOST 'baike.baidu.com';
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
    }
  
    # 给外部调用,进行文本替换
    location / {
        proxy_pass https://vm.nineya.com/test;
        proxy_set_header Accept-Encoding '';
        sub_filter_once off;
        sub_filter 马云 玖涯;
    }
}

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

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

相关文章

linux cpu调度分析

一、cpu调度调试方法 echo 0 > /sys/kernel/debug/tracing/tracing_on echo > /sys/kernel/debug/tracing/trace echo 30720 > /sys/kernel/debug/tracing/buffer_size_kb echo nop > /sys/kernel/debug/tracing/current_tracer echo sched_switch sched_wakeup s…

移除石子使总数最小(LeetCode日记)

LeetCode-1962-移除石子使总数最小 题目信息: 给你一个整数数组 p i l e s piles piles ,数组 下标从 0 0 0 开始 ,其中 p i l e s [ i ] piles[i] piles[i] 表示第 i i i 堆石子中的石子数量。另给你一个整数 k k k ,请你执行下述操作…

Win11右键菜单显示全部的方法

Win11右键菜单显示全部的方法:1. 用鼠标右键点击“开始”按钮(或者按WinX键),选择点击 “Windows 终端(管理员)”。 2.在终端应用程序里粘贴这串代码【reg.exe add “HKCU\Software\Classes\CLSID{86ca1aa…

实现一个最简单的内核

更好的阅读体验,请点击 YinKai s Blog | 实现一个最简单的内核。 ​ 这篇文章带大家实现一个最简单的操作系统内核—— Hello OS。 PC 机的引导流程 ​ 我们这里将借助 Ubuntu Linux 操纵系统上的 GRUB 引导程序来引导我们的 Hello OS。 ​ 首先我们得了解一下&a…

burpsuite与sqlmap联动(sqlipy配置)

首先我们需要在burpsuite的 扩展-选项 里配置两个路径: 第一个路径为 jython-standalone-2.7.3.jar 的路径 这个jar文件我们需要自己下载,下载地址:https://www.jython.org/ 点击 download 点击 Jython Standalone 下载好之后将这个jar文件…

Django之DRF框架三,序列化组件

一、序列化类的常用字段和字段参数 常用字段 字段名字段参数CharFieldmax_lengthNone, min_lengthNone, allow_blankFalse, trim_whitespaceTrueIntegerFieldmax_valueNone, min_valueNoneFloatFieldmax_valueNone, min_valueNoneBooleanFieldNullBooleanFieldFloatFieldmax_…

基于Python的音乐数据可视化与推荐系统开发

基于Python的音乐数据可视化与推荐系统开发 导言: 音乐是人们生活中不可或缺的一部分,而对于音乐数据的收集、分析和可视化正逐渐成为技术领域的热点。本文介绍了一款基于Python开发的音乐数据可视化与推荐系统,通过爬取千千音乐网站的数据&a…

C# 实现虚拟数字人

随着Ai技术的提升和应用,虚拟数字人被广泛应用到各行各业中。为我们的生活和工作提供了非常多的便利和色彩。 通过设置虚拟数字人的位置大小,可以让数字人可以在电脑屏幕各个位置显示: 虚拟数字人素材: 虚拟数字人(实际有语音&am…

双向A*算法-python

GitHub - LittleFox99/B_A_star: Bidirectional A Star 其中a,b分别为双向A*搜索的权重 #-*- coding:utf-8 -*- # Time : 2020/11/11 1:21 下午 # Author : LittleFox99 # File : a_star.py # 参考: # https://blog.csdn.net/lustyoung/article/d…

前缀和+单调双队列+贪心:LeetCode2945:找到最大非递减数组的长度

本文涉及知识点 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 单调双队列 贪心 题目 给你一个下标从 0 开始的整数数组 nums 。 你可以执行任意次操作。每次操作中,你需要选择一个 子数组 ,并将这个子数组用它所…

资深13年测试整理,性能测试指标-评估方法,一篇搞懂...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、软件性能的关注…

深入探讨DNS数据包注入与DNS中毒攻击检测 (C/C++代码实现)

DNS数据包注入和DNS中毒攻击是网络安全领域中的两个重要主题。DNS(域名系统)是互联网中的一项核心服务,负责将域名转换为与之相对应的IP地址。 DNS数据包注入是指攻击者通过篡改或伪造DNS请求或响应数据包来干扰或破坏DNS服务的过程。攻击者…

webots仿真报警[ERROR] [1703399199.459991029]: Sampling period is not valid.

一、故障现象 在运行interace传感器使能程序时,报警[ERROR] [1703399199.459991029]: Sampling period is not valid. [ERROR] [1703399199.460080083]: Failed to enable lidar.并发生崩溃。 二、解决方式 1、尝试将程序中的TIME_STEP数值改为与WOrldInfo中的bas…

LeetCode 1954. 收集足够苹果的最小花园周长

一、题目 1、题目描述 给你一个用无限二维网格表示的花园,每一个 整数坐标处都有一棵苹果树。整数坐标 (i, j) 处的苹果树有 |i| |j| 个苹果。 你将会买下正中心坐标是 (0, 0) 的一块 正方形土地 ,且每条边都与两条坐标轴之一平行。 给你一个整数 need…

Cross-Drone Transformer Network for Robust Single Object Tracking论文阅读笔记

Cross-Drone Transformer Network for Robust Single Object Tracking论文阅读笔记 Abstract 无人机在各种应用中得到了广泛使用,例如航拍和军事安全,这得益于它们与固定摄像机相比的高机动性和广阔视野。多无人机追踪系统可以通过从不同视角收集互补的…

红日靶场-2

目录 前言 外网渗透 外网渗透打点 1、arp探测 2、nmap探测 3、nikto探测 4、gobuster目录探测 WebLogic 10.3.6.0 1、版本信息 2、WeblogicScan扫描 3、漏洞利用 4、哥斯拉连接 内网渗透 MSF上线 1、反弹连接 2、内网扫描 3、frpc内网穿透 4、ms17-010 5、ge…

【测试开发】测试用例讲解

文章目录 目录 文章目录 前言 一、测试用例的基本要素 二、测试用例的设计方法 1.基于需求的设计方法 对日历根据web界面的功能布局分析出的功能框图如下: 继续举一个例子百度云盘非功能测试的案例: 2.等价类 3.边界值 5.正交表 6.场景设计法 7…

什么等等? I/O Wait ≠ I/O 瓶颈?

本文地址:什么等等? I/O Wait ≠ I/O 瓶颈? | 深入浅出 eBPF 1. I/O Wait 定义2. 测试验证3. 进一步明确磁盘吞吐和读写频繁进程4. 内核 CPU 统计实现分析5. 总结参考资料 1. I/O Wait 定义 I/O Wait 是针对单个 CPU 的性能指标&#xff0…

使用Python实现发送Email电子邮件【第19篇—python发邮件】

文章目录 👽使用Python实现发送Email电子邮件🎶实现原理🏃Python实现发送Email电子邮件-基础版👫实现源码🙆源码解析 💇Python实现发送Email电子邮件-完善版👫实现源码🙆源码解析&am…

【贪心】单源最短路径Python实现

文章目录 [toc]问题描述Dijkstra算法Dijkstra算法应用示例时间复杂性Python实现 个人主页:丷从心 系列专栏:贪心算法 问题描述 给定一个带权有向图 G ( V , E ) G (V , E) G(V,E),其中每条边的权是非负实数,给定 V V V中的一个…