说明: sub_filter 用于替换响应内容中字符串的指令,它主要用于反向代理和修改响应内容
sub_filter 是 ngx_http_sub_module 模块提供的功能,需要确保该模块被编译进 NGINX。
使用样例:
location /ddd/decision {
proxy_http_version 1.1;
proxy_set_header Accept-Encoding "";
proxy_pass http://192.168.1.166:8080/webroot/decision;
proxy_redirect /webroot/decision /ddd/decision;
proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
sub_filter "/webroot/decision" "/ddd/decision";
sub_filter "/webroot/" "/ddd/";
sub_filter "/webroot/decision/resources" "/ddd/decision/resources";
sub_filter_once off;
sub_filter_types application/json application/javascript text/css image/png image/jpeg image/svg+xml;
}
字段说明:
两个关键配置:
proxy_redirect /webroot/decision /ddd/decision;
这个是修改302请求的路径变更的
sub_filter "/webroot/decision" "/ddd/decision";
这个是对返回的资源路径进行替换的
sub_filter_once off; 这个是不限替换次数
sub_filter_types 这个是根据mime.type 指定替换url资源的类型,可以指定一环某些资源
缺点:
这个方法能成功,但是解决不了一个问题,就是js或者css里引用变量作为路径,类似于:.map-data-import-icon .x-icon {
display: block;
background: url('${fineServletURL}/resources?path=/com/fr/web/resources/dist/images/2x/data_import.png') no-repeat center center;
background-size: contain;
}
解决方式: 可以将变量引用的静态文件,可以缓存到nginx本地。统一读取nginx路径下的文件。后续更新同步更新nginx路径下的文件。