当前位置: 代码网 > it编程>数据库>Redis > Nginx反向代理和内容替换模块实现网页内容动态替换功能

Nginx反向代理和内容替换模块实现网页内容动态替换功能

2024年10月06日 Redis 我要评论
nginx是一款轻量级高性能服务器软件,虽然轻量,但功能非常强大,可用于提供web服务、反向代理、负载均衡、缓存服务、甚至可以通过添加一些模块搭建rtmp流媒体服务。最近碰到一个客户需求,需要用到ng

nginx是一款轻量级高性能服务器软件,虽然轻量,但功能非常强大,可用于提供web服务、反向代理、负载均衡、缓存服务、甚至可以通过添加一些模块搭建rtmp流媒体服务。最近碰到一个客户需求,需要用到nginx网页内容替换模块,贴出来跟大家交流,如有不足之处请指出。

ngx_http_sub_module模块是一个过滤器,它修改网站响应内容中的字符串。这个模块已经内置在nginx中,但是默认未安装,需要安装需要加上配置参数:--with-http_sub_module 如果已经安装nginx,只需要再添加这个模块就可以了。

安装替换

nginx官网下载安装包:http://nginx.org/en/download.html

# wget http://nginx.org/download/nginx-1.11.5.tar.gz

# tar -zxvf nginx-1.11.5.tar.gz

# cd nginx-1.11.5

# ./configure --with-http_stub_status_module --with-http_sub_module && make && make install

常用指令

sub_filter指令

sub_filter string(原字符串) replacement(用于替换的字符串);

用于设置需要使用说明字符串替换说明字符串.string是要被替换的字符串,replacement是新的字符串,它里面可以带变量。

sub_filter_last_modified指令

sub_filter_last_modified on | off;

用于设置网页内替换后是否修改 可在nginx.conf的 http, server, location三个位置配置使 用,默认值是off;

sub_filter_once指令

sub_filter_once on | off;

用于设置字符串替换次数,默认只替换一次。如果是on,默认只替换第一次匹配到的到字 符,如果是off,那么所有匹配到的字符都会被替换;

sub_filter_types指令

sub_filter_types *

用于指定需要被替换的mime类型,默认为“text/html”,如果制定为*,那么所有的;

说明:以上指令可在nginx.conf的http, server, location三个位置配置使用;

反向代理动态替换网页内容实例参考

server {
        listen       80;
        server_name  mikecrm.xianzhixiong.com;
 
        # 上传文件大小限制
        client_max_body_size 20m;
        # 设置为on表示启动高效传输文件的模式
        sendfile on;
 
        #charset koi8-r;
 
        #access_log  logs/host.access.log  main;
 
        location / {
        #access_log  logs/host.access.log  main;
 
        location / {
            #root   html;
            #index  index.html index.htm;
            proxy_pass   http://mikecrm.com;
            proxy_set_header host mikecrm.com;
            proxy_set_header referer http://mikecrm.com;
            proxy_set_header x-real-ip $remote_addr;
            proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
            proxy_set_header x-forwarded-proto $scheme;
            #proxy_request_buffering off;
            proxy_set_header accept-encoding "";
            sub_filter_types *;
            sub_filter_once off;
            #sub_filter_last_modified on;
            sub_filter 'cdnq2.mikecrm.com' 'mikecrm.xianzhixiong.com';
            sub_filter 'cdnq3.mikecrm.com' 'mikecrm.xianzhixiong.com';
            sub_filter 'https://cdnq2plt.mikecrm.com' 'http://mikecrm.xianzhixiong.com';
            sub_filter 'https://cdnq3plt.mikecrm.com' 'http://mikecrm.xianzhixiong.com';
            sub_filter 'http://dlcn.mikecrm.com' '';
            sub_filter 'http://mikecrm.com' '';
            sub_filter 'https://mikecrm.com' '';
            sub_filter 'www.mikecrm.com' 'mikecrm.xianzhixiong.com';
            #sub_filter '.mikecrm.com' 'mikecrm.xianzhixiong.com';
            #sub_filter 'mikecrm.com' 'mikecrm.xianzhixiong.com';
        }
        #location ~ \.php$ {
           # proxy_pass   https://real.mikecrm.com;
        #}
        #location ~ /plt.js$ {
           # proxy_pass   https://cdnq3plt.mikecrm.com;
        #}
 
}

参数解释

注意只有在新版本nginx中才支持多sub_filter.

proxy_set_header accept-encoding "";  
设置这个得原因是:告诉后端不要进行gzip压缩.  如果是gzip压缩流, 那么我们就没法进行替换了.

sub_filter_types *;  
对所有请求响应类型都做sub_filter指定的替换.

sub_filter_once off;
sub_filter会执行多次而不是一次. 效果类似于java中的string.replaceall而不是replace.

sub_filter 'str1'  'str2';
替换字符串,str1是搜索的字符串,str2是最终被替换成的字符串

总结

到此这篇关于nginx反向代理和内容替换模块实现网页内容动态替换功能的文章就介绍到这了,更多相关nginx反向代理替换网页字符串内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

  • nginx出现500 Internal Server Error错误的解决方法

    nginx出现500 Internal Server Error错误的解决方法

    问题原因找不到资源文件路径文件路径没有访问权限解决方法1. 查看nginx错误日志错误日志是最直接的信息来源,日志会记录导致 500 错误的具体原因。可以通过以... [阅读全文]
  • Redis 使用跳表实现有序集合的方法

    近几年针对 redis 面试时会涉及常见数据结构的底层设计,其中就有这么一道比较有意思的面试题:“redis 的有序集合底层为什么要用跳表,而不用平衡树、红黑树或者 b…

    2024年09月29日 数据库
  • 详解Redis如何处理Hash冲突

    详解Redis如何处理Hash冲突

    引言在 redis 中,哈希表是一种常见的数据结构,通常用于存储对象的属性,对于哈希表,最常遇到的是哈希冲突,那么,当 redis遇到hash冲突会如何处理?这... [阅读全文]
  • Redis 实现分布式锁时需要考虑的问题解决方案

    Redis 实现分布式锁时需要考虑的问题解决方案

    引言分布式系统中的多个节点经常需要对共享资源进行并发访问,若没有有效的协调机制,可能会导致数据竞争、资源冲突等问题。分布式锁应运而生,它是一种保证在分布式环境中... [阅读全文]
  • Redis实现接口防抖的示例代码

    说明:实际开发中,我们在前端页面上点击了一个按钮,访问了一个接口,这时因为网络波动或者其他原因,页面上没有反应,用户可能会在短时间内再次点击一次或者用户以为没有点到,很快的又点了一…

    2024年10月14日 数据库
  • Redis中pipeline(管道)的实现示例

    举个例子: 小卖铺免费让你拿50瓶饮料,你是一次拿一瓶拿回家,还是打包一次或者多次拿回家?概念redis管道(pipelining)是一种在客户端向服务端发送多个请求而不等待响应的…

    2024年10月14日 数据库

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com