Pau*_*ent 5 mod-rewrite reverse-proxy mod-proxy apache-2.4 apache2
我有一个正在工作的反向代理,它仅在我的站点中的特定位置上处于活动状态,在本例中例如:www.example.com/reverseproxy/site1
我正在反向代理 site1。我想替换每个代理页面正文的某些部分,所以我尝试使用 mod_substitute,问题是我无法让它在<Location /reverseproxy>
这是我的 httpd(启用了 SSL):
<VirtualHost _default_:443>
ProxyPassInterpolateEnv On
RewriteEngine On
... Some rewrite rules
RewriteRule /?reverseproxy/http(s*):/([^\/]*)/*(.*) "http$1://$2/$3" [P]
SSLProxyEngine On
ProxyPassReverse "/reverseproxy/http${ssl}://${page}" http${ssl}://${page} interpolate
SetOutputFilter INFLATE;proxy-html;SUBSTITUTE;DEFLATE;
ProxyHTMLInterp On
ProxyHTMLExtended Off
...Some ProxyURLMap
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s|<body>|<body1>|"
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
这个替代品确实有效,但它适用于所有页面,而不仅仅是/reverseproxy
. 当我尝试将其放入时,<Location /reverseproxy>
它不起作用,它只是忽略它:
<Location /reverseproxy>
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s|<body>|<body1>|"
</Location>
Run Code Online (Sandbox Code Playgroud)
我尝试添加
RequestHeader unset Accept-Encoding
Run Code Online (Sandbox Code Playgroud)
在标签之外<Location>
但它不起作用
我尝试添加这个
SetOutputFilter SUBSTITUTE;DEFLATE
Run Code Online (Sandbox Code Playgroud)
在<Location /reverseproxy>
标签中但没有运气
正如有人建议尝试使用这个过滤器链
FilterDeclare filter
FilterProvider filter SUBSTITUTE "%{CONTENT_TYPE} =~ m|^text/html|"
FilterDeclare unpackGZIP
FilterProvider unpackGZIP INFLATE "resp('Content-Encoding') == 'gzip'"
<Location /reverseproxy>
FilterChain unpackGZIP filter DEFLATE
Run Code Online (Sandbox Code Playgroud)
位置内的其他所有内容都有效,它似乎忽略了替换。
小智 4
我很高兴地说有一种方法可以解决插值问题,至少可以解决替换问题。
很多用 mod_substitute 进行插值的谷歌结果都在这里,所以我想我会帮忙。确实可以这样做:
## These modules are required
LoadModule filter_module modules/mod_filter.so
LoadModule substitute_module modules/mod_substitute.so
LoadModule env_module modules/mod_env.so
## Must be done in vhost directive
<VirtualHost:*:80>
PassEnv HOSTNAME_ENV_VARIABLE_NAME
Define SUBSTITUTE_STRING "s|http://hardcoded-url|http://${HOSTNAME_ENV_VARIABLE_NAME}|i"
<Location /my-path-here-wut-wut/>
AddOutputFilterByType SUBSTITUTE my/mime-type-here
Substitute "${SUBSTITUTE_STRING}"
</Location>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
当访问/my-path-here-wut-wut/
它返回的 HTML 时,包含http://hardcoded-url
它的内容将被替换为http://<HOSTNAME_ENV_VARIABLE_NAME>
归档时间: |
|
查看次数: |
3837 次 |
最近记录: |