我正在尝试使用像这样的东西来重写代理页面的正文链接:
sub_filter http://proxied.page.come http://local.page.com; sub_filter_once off;
这是否是要走的路? sub_filter模块和substitutions_filter有什么不同?
也可以在sub_filter delcaration中使用variables吗?
理想情况下,你应该要求后端编写正确的链接。 尽管可以使用子过滤器来修复一些简单的情况,但这通常是不可能的(例如,如果返回的数据不是文本,而是例如闪存代码)。
您可以在sub_filter中的替换字符串中使用变量(但不能在字符串中匹配原始响应),这是明确记录的 :
替换字符串可以包含变量。
至于子过滤器 – 这是一个第三方模块,预计会更强大,但可能包含更多的错误。 只要标准的子过滤器就足够了 – 你可能不想使用第三方的子过滤器。
这是在代理页面上重写链接的完美有效方法。 “ ngx_http_sub_module
模块是一个通过用另一个指定的字符串替换一个响应来修改响应的过滤器”(单个替换)
第三方nginx_substitutions_filter
是一个过滤器模块,它可以在响应体上执行正则表达式和固定字符串替换
所以第三方模块可以用来替换多个字符串,使用正则表达式和变量。 例如:
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;