在nginxconfiguration下的“IF”块中使用“sub_filter”

我有nginx作为reverse_proxy服务器在多个应用程序服务器上运行的多个应用程序。 我想诱导特定的HTML /脚本到响应内容设置预先注册的url。 这些URL可能属于nginx后面的任何应用程序。 为此,我使用所有的url的sub_filter,它工作正常。 但是,当我试图把“sub_filter”在“如果”块现在允许。

我需要像下面的东西。

resolver 8.8.8.8; proxy_pass http://www.example.com; proxy_set_header Accept-Encoding *; gunzip on; if ( $induceScript = 1) { sub_filter "</body>" "<div class='induced' <font color=red size=8>Induced Text </font></div></body>"; sub_filter_types *; sub_filter_once off; } 

当我尝试重新启动nginx时显示以下错误消息。

nginx: [emerg] "sub_filter" directive is not allowed here in /etc/openresty/openresty.conf

从这个如果我正确理解“IF”指令不允许“sub_fiter”里面。 有什么具体的原因呢? 还提供正确的方法/替代方法来解决这个问题。

Nginx不允许sub_filter, if in location级别的文档,你需要“碰”一个级别

 location /mylocation { error_page 418 = @sub_location; recursive_error_pages on; if ($induceScript = 1) { return 418; } } location @sub_location { sub_filter "</body>" "<div class='induced' <font color=red size=8>Induced Text </font></div></body>"; sub_filter_types *; sub_filter_once off; proxy_pass http://www.example.com; proxy_set_header Accept-Encoding *; #add any other config you need here } 

如果它为true,则检查$induceScript = 1 ,它返回一个418错误,然后传递到现在在位置级具有sub_filter指令的位置@sub_location