mod_substitute JSON替换URL

时间:2018-07-31 14:42:04

标签: json apache module proxy

提到THIS问题:

UseCase:我发布了一个请求,该请求由ProxyPass / ProxyPassReverse zu更改,到达后端服务器。响应由Content-Type application / json组成,其中包含我必须手动替换的后端URL。

我的配置文件(proxy-https.conf)包含在httpd.conf中,并且通常可以正常运行(例如ProxyPass运行正常)。设置就像:

Listen 443     
  <VirtualHost *:443>

  my rules...

</VirtualHost>

我的方法是使用mod_substitute替换json中的URL。但是无论我做什么,我都无法用它来替换后端URL:

Substitute "s|backend-server:2719|proxy-host:443|ni"

或者:

<Location "/">
    SetOutputFilter INFLATE;SUBSTITUTE;DEFLATE
    AddOutputFilterByType SUBSTITUTE application/json
    Substitute "s|backend-server:2719|proxy-host|ni"
</Location>

而且:我必须再次添加模块,尽管它已经添加到了httpd.conf中:

LoadModule substitute_module modules/mod_substitute.so

我的方法中是否存在一般性错误,或者我可以采用其他方法吗?也许是另一个模数?

坦克!

1 个答案:

答案 0 :(得分:0)

好的,我自己找到答案:

LoadModule substitute_module modules/mod_substitute.so
LoadModule deflate_module modules/mod_deflate.so

FilterDeclare FnRofSGWinJSON
FilterProvider FnRofSGWinJSON SUBSTITUTE "%{CONTENT_TYPE} =~ m|^application/json|"

FilterDeclare unpackGZIP
FilterProvider unpackGZIP INFLATE "resp('Content-Encoding') == 'gzip'"

<Location "/my/pressous/path/">
  FilterChain unpackGZIP FnRofSGWinJSON DEFLATE
  Substitute "s|${URL_1}|${URL_2}/MarkerPath|in"
</Location>

打开是,为什么我必须再次加载模块...