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

突发奇想,用 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.mzph.cn/news/241829.shtml

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

相关文章

物联网产品设计,聊聊设备OTA的升级

物联网产品设计部分的OTA设备固件是一个非常重要的部分,能够实现升级用户服务、保障系统安全等功能。 在迅速变化和发展的物联网市场,新的产品需求不断涌现,因此对于智能硬件设备的更新需求就变得空前高涨,设备不再像传统设备一样…

linux循环调度执行

9.2 循环调度执行 9.2.1 简介 cron的概念和crontab是不可分割的。 ​ crontab是一个命令,常见于Unix和Linux的操作系统之中用于设置周期性被执行的指令。 ​ 该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执…

移除石子使总数最小(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 ,请你执行下述操作…

Django开发2

Django开发2 Django开发1.新建项目2.创建app3.设计表结构(django)4.在MySQL中生成表5.静态文件管理6.部门管理7.模板的继承8.用户管理8.1 初识Form1. views.py2.user_add.html 8.3 ModelForm(推荐)0. models.py1. views.py2.user_…

机器人创新实验室任务三参考文档

一、JAVA环境配置 需要在Linux里面下载并且安装java。 sudo apt-get install openjdk-17-jre-headless 打开终端并且运行指令,用apt下载安装java。官方用的好像是java11,我安装的是java17。 如果无法定位软件安装包,可以试试更新一下 sudo …

阿里云助力企业出海六大优势

企业基于阿里云出海六大优势:基础设施与网络覆盖全球多地域、国际级合规资质与认证、国内外一致的产品体验、富有竞争力的技术方案、丰富的行业实践与案例和贴身的本地化服务响应,阿里云百科aliyunbaike.com分享阿里云出海六大优势: 阿里云出…

直接插入排序【从0-1学数据结构】

文章目录 💗 直接插入排序Java代码C代码JavaScript代码稳定性时间复杂度空间复杂度 我们先来学习 直接插入排序, 直接排序算是所有排序中最简单的了,代码也非常好实现,尽管直接插入排序很简单,但是我们依旧不可以上来就直接写代码,一定要分析之后才开始写,这样可以提…

JavaScript中的正则表达式构造函数和正则表达式字面量

在JavaScript中,我们可以使用两种方式创建正则表达式:通过正则表达式字面量和通过正则表达式构造函数。 正则表达式字面量是用斜杠(/)包围的模式,例如: var regex /pattern/;正则表达式构造函数是通过Re…

统计和绘图软件GraphPad Prism mac功能特点

GraphPad Prism mac是一款专业的统计和绘图软件,主要用于生物医学研究、实验设计和数据分析。 GraphPad Prism mac功能和特点 数据导入和整理:GraphPad Prism 可以导入各种数据格式,并提供直观的界面用于整理、编辑和管理数据。用户可以轻松…

大白鲨生成Windows木马(仅供参考不可实践)

一、学习方法 一个正确的学习方法往往比学习更为重要 方法一:学习技术的本质性作用 (第一性定律) — 帮助我们解决的问题是什么 — 产生的原因/价值 方法二:在工作中到底如何使用? 方法三:技术是由人…

【pynput】鼠标行为追踪并模拟

文章目录 前言基本思路安装依赖包实时鼠标捕获捕获鼠标位置捕获鼠标事件记录点击内容 效果图 利用本文内容从事的任何犯法行为和开发与本人无关,请理性利用技术服务大家,创建美好和谐的社会,让人们生活从繁琐中变得更加具有创造性&#xff01…

SQL语句分类

关系分类 SQL区分为三类关系 表 在数据库中存储,可以对其进行增删改查 视图 通过计算定义的关系,并不在数据库中存储,只在需要的使用进行构造 临时表 在执行查询或更新时由SQL程序临时构造的,处理结束后就会删除 语言分类 数据查询…

确保设备索引与 GPU 的物理连接顺序一致的方法

问题描述 在使用以下指令来指定使用的GPU序号时,可能会遇到设备索引与 GPU 的物理连接顺序不一致的问题,即你指定了GPU 3来运行代码,但代码却是在其他GPU上运行的。 ## python os.environ["CUDA_VISIBLE_DEVICES"] "3"…

JavaScript状态模式

JavaScript状态模式 1 什么是状态模式2 使用状态模式改造电灯程序3 缺少抽象类的变通方式4 示例:文件上传4.1 场景描述4.2 代码过程 1 什么是状态模式 允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。 比如说这样一个场景&a…

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

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

指南:在App Store Connect上编辑多个用户的访问权限

作为一名编程新手,在App Store Connect中管理用户权限可能初听起来有些复杂,但实际上它是一个相对直接的过程。这里是一个步骤清晰的指南来帮助您在App Store Connect上编辑多个用户的访问权限。 App Store Connect 简介 在开始之前,让我们…

Openwrt AP 发射 WiFi 信号

问题 想一次把 OpenWrt 路由器 wifi 问题给解决,完全取代路由器。 使用 倍控的 N5105 设备,有 mPCIe 接口,使用了 intel AX200 无线网卡,支持 2.4G 与 5G。 设置步骤 OpenWrt 镜像 第一次使用的镜像不支持 wifi,在…

[杂谈] 知识量受到挑战的例子

记得上高中的时候,有一次我们三个同学讨论鸡蛋孵出小鸡的问题。其中一个同学问,是不是所有的鸡蛋都会孵出小鸡?另外的两个,包括我,就说:是的!这个问问题的同学就开始笑的都要合不拢嘴了&#xf…

详解Keras3.0 KerasNLP Models: GPT2 GPT2Tokenizer

1、GPT2Tokenizer 用于将文本数据转换为适合训练和预测的格式,主要功能是将输入的文本进行分词、编码等操作,以便在神经网络中使用 keras_nlp.models.GPT2Tokenizer(vocabulary, merges, **kwargs) 参数说明 vocabulary:一个字典&#x…

“抓取再吸取的连续操作学习”研究工作发表于IEEE Trans. on Robotics:仿人手的柔性抓取,超人手的指背吸取!

长期以来,抓取一直被认为是机器人操作中一项重要而实际的任务。然而,实现对不同物体的稳健和有效的抓取具有挑战性,因为它涉及夹具设计、感知、控制和学习等。最近基于学习的方法在抓取各种新物体方面表现出优异的性能。然而,这些…