1、sub_filter
1.1、概述
sub_filter是 Nginx 中的一个指令,用于在 Nginx 响应内容中进行字符串替换。它主要用于对后端服务器返回的 HTML、CSS、JavaScript 等文本类型的内容进行修改,这在很多场景下非常有用,比如修改页面中的链接、替换文本内容等。
1.2、配置项
sub_filter的基本语法是sub_filter string replacement;,其中string是要被替换的原始字符串,replacement是替换后的字符串;
sub_filter_types:*; 配置用于指定需要替换的类型,如text/html text/plain application/javascript等,以空格分隔;
sub_filter_once off;配置可以用来指定是否只进行一次替换。默认值是off,即会替换所有匹配的字符串;如果设置为on,则只替换第一次匹配到的字符串;
1.3、示例
dart
代码解读
复制代码
location /webapi.amap.com/ { set $proxyip "主机IP:主机Port"; proxy_set_header Accept-Encoding ""; proxy_pass http://webapi.amap.com/; sub_filter_types *; sub_filter_once off; sub_filter 'webapi.amap.com' '$proxyip/webapi.amap.com'; sub_filter 'vdata.amap.com' '$proxyip/vdata.amap.com'; sub_filter 'restapi.amap.com' '$proxyip/restapi.amap.com'; sub_filter 'vdata0{1,2,3,4}.amap.com' '$proxyip/vdata0{1,2,3,4}.amap.com'; sub_filter '{vdata,vdata01,vdata02,vdata03,vdata04}.amap.com' '$proxyip/{vdata,vdata01,vdata02,vdata03,vdata04}.amap.com'; sub_filter 'wprd0{1,2,3,4}.is.autonavi.com' '$proxyip/wprd0{1,2,3,4}.is.autonavi.com'; sub_filter 'webrd0{1,2,3,4}.is.autonavi.com' '$proxyip/wprd0{1,2,3,4}.is.autonavi.com'; sub_filter 'https' 'http'; }
2、Nginx配置sub_filter
这个功能已经内置在nginx中,但是默认未安装,如果需要,安装配置时要加上配置参数:--with-http_sub_module ,如果已经安装nginx,需要再添加这个模块就可以了,该章节演示如何在已有的Nginx新增该配置。
如果未配置该模块,则会报错:
sql
代码解读
复制代码
nginx: [emerg] unknown directive "sub_filter_types"
2.1、查看当前配置
查看当前配置:
bash
代码解读
复制代码
# 切到sbin文件夹 cd /gis/nginx/sbin/ # 查看配置 ./nginx -V
输出:
ini
代码解读
复制代码
nginx version: nginx/1.26.2 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) configure arguments: --prefix=/gis/nginx
2.2、修改配置
进入原来的nginx源码包,如果已经删除了可以重新下载,版本相同即可。
ini
代码解读
复制代码
# 进入安装包解压目录,执行配置命令 ./configure --prefix='/gis/nginx' --with-http_sub_module
输出:
dart
代码解读
复制代码
checking for OS + Linux 4.19.12-1.el7.elrepo.x86_64 x86_64 checking for C compiler ... found + using GNU C compiler + gcc version: 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) checking for gcc -pipe switch ... found checking for -Wl,-E switch ... found checking for gcc builtin atomic operations ... found ... ... checking for PCRE2 library ... not found checking for PCRE library ... found checking for PCRE JIT support ... found checking for zlib library ... found creating objs/Makefile Configuration summary + using system PCRE library + OpenSSL library is not used + using system zlib library nginx path prefix: "/gis/nginx" nginx binary file: "/gis/nginx/sbin/nginx" nginx modules path: "/gis/nginx/modules" nginx configuration prefix: "/gis/nginx/conf" nginx configuration file: "/gis/nginx/conf/nginx.conf" nginx pid file: "/gis/nginx/logs/nginx.pid" nginx error log file: "/gis/nginx/logs/error.log" nginx http access log file: "/gis/nginx/logs/access.log" nginx http client request body temporary files: "client_body_temp" nginx http proxy temporary files: "proxy_temp" nginx http fastcgi temporary files: "fastcgi_temp" nginx http uwsgi temporary files: "uwsgi_temp" nginx http scgi temporary files: "scgi_temp
2.3、重新编译
注意不要make install,不然会覆盖你的nginx目录
bash
代码解读
复制代码
# 编译命令 make
输出:
vbnet
代码解读
复制代码
make -f objs/Makefile make[1]: Entering directory `/gis/nginx-1.26.2-source' cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I src/core -I src/event -I src/event/modules -I src/event/quic -I src/os/unix -I objs \ -o objs/src/core/nginx.o \ src/core/nginx.c ... ... objs/ngx_modules.o \ -ldl -lpthread -lcrypt -lpcre -lz \ -Wl,-E sed -e "s|%%PREFIX%%|/gis/nginx|" \ -e "s|%%PID_PATH%%|/gis/nginx/logs/nginx.pid|" \ -e "s|%%CONF_PATH%%|/gis/nginx/conf/nginx.conf|" \ -e "s|%%ERROR_LOG_PATH%%|/gis/nginx/logs/error.log|" \ < man/nginx.8 > objs/nginx.8 make[1]: Leaving directory `/gis/nginx-1.26.2-source'
2.4、替换新编译的文件
bash
代码解读
复制代码
# 先停止原有服务 cd /gis/nginx/sbin/ ./nginx -s stop # 备份原文件 mv nginx nginx_bak # 将新编译的文件复制过来 cp /gis/nginx-1.26.2-source/objs/nginx .
2.5、测试配置
bash
代码解读
复制代码
./nginx -V
输出:
javascript
代码解读
复制代码
nginx version: nginx/1.26.2 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) configure arguments: --prefix=/gis/nginx --with-http_sub_module
可以看到配置已经增加了--with-http_sub_module
2056

被折叠的 条评论
为什么被折叠?



