0x1
在某些情况下,我们代理了第三方的源站,想要修改源站的响应内容给客户端,此需求是可以通过常用的httpd,nginx代理服务器实现的,本文章仅描述nginx的方法。
0x2
nginx的sub_filter模块可以实现替换响应内容,模块介绍:
http://nginx.org/en/docs/http/ngx_http_sub_module.html
局限性:nginx 自带的sub_filter不支持正则表达式,第三方模块提供了正则 substitutions
0x3
官方自带的sub_filter和第三方的同时编译,官方模块直接with-http_sub_module就行了
--prefix=/usr/local/tengine --add-module=modules/ngx_http_upstream_session_sticky_module/ --add-module=modules/ngx_http_upstream_check_module/ --with-stream --with-stream_realip_module --with-http_sub_module --add-module=modules/ngx_http_substitutions_filter_module/
0x4
sub_filter可以放在http,server,location段。这里的nginx专门用来做gis代理,所以放在http段内,避免多个server或者location都需要重复加载
proxy_set_header Accept-Encoding '';
sub_filter 'webapi.amap.com' '192.168.3.100:8121';
sub_filter 'ditu.amap.com' '192.168.3.100:8122';
sub_filter 'vdata.amap.com' '192.168.3.100:8123';
sub_filter 'restapi.amap.com' '192.168.3.100:8125';
sub_filter 'cache.amap.com' '192.168.3.100:8126';
sub_filter 'https' 'http';
sub_filter_types *;
sub_filter_once off;
0x5
第三方模块配置示例:
proxy_set_header Accept-Encoding '';
sub_filter 'webapi.amap.com' '192.168.3.100:8121';
sub_filter 'ditu.amap.com' '192.168.3.100:8122';
sub_filter 'vdata.amap.com' '192.168.3.100:8123';
sub_filter 'restapi.amap.com' '192.168.3.100:8125';
sub_filter 'cache.amap.com' '192.168.3.100:8126';
sub_filter 'webrd0{1,2,3,4}.is.autonavi.com' '192.168.3.100:8201';
sub_filter 'wprd0{1,2,3,4}.is.autonavi.com' '192.168.3.100:8301';
sub_filter 'webst0{1,2,3,4}.is.autonavi.com' '192.168.3.100:8401';
sub_filter 'vector.amap.com' '192.168.3.100:8129';
sub_filter 'm.amap.com' '192.168.3.100:8130';
sub_filter 'a.amap.com' '192.168.3.100:8135';
sub_filter 'http://gaode.com' 'http://192.168.3.100:8138';
#sub_filter 'https' 'http';
#sub_filter_types *;
sub_filter_types application/javascript text/javascript text/css;
sub_filter_once off;