我正在尝试使用以下内容重写代理页面的正文链接:
sub_filter http://proxied.page.come http://local.page.com;
sub_filter_once off;
这是最好的方式吗? sub_filter module和substitutions_filter
之间有什么区别?也可以在sub_filter delcaration中使用变量吗?
答案 0 :(得分:10)
这是在代理页面上重写链接的完美有效方法。
" ngx_http_sub_module
模块是一个过滤器,它通过将一个指定的字符串替换为另一个"来修改响应。 (单一替代)
第三方nginx_substitutions_filter
是一个过滤器模块,可以在响应主体上执行正则表达式和固定字符串替换
因此,第三方模块可用于使用正则表达式和变量替换多个字符串。 e.g:
subs_filter_types text/css text/xml;
subs_filter http(s)?://(www.)?proxied.page.com/ http$1://$http_host/ r;
subs_filter http(s)?://(www.)?proxied2.page.com/ http$1://$http_host/ r;
答案 1 :(得分:4)
理想情况下,您应该要求后端编写正确的链接。尽管可以使用子过滤器修复一些简单的情况,但通常不可能(例如,如果返回的数据不是文本,而是闪存代码)。
你可以在sub_filter中的替换字符串中使用变量(但不能在原始响应中匹配字符串),它是明确documented:
替换字符串可以包含变量。
对于子过滤器 - 它是第三方模块,预计会更强大,但可能包含更多错误。只要标准子过滤器足够你 - 你可能不想使用第三方子过滤器。