使用 Apache,如何使用反向代理解释从另一台服务器返回的页面上的 SSI?

With Apache, how to interpret SSI on a page returned from another server using reverse proxy?

使用 apache,我尝试使用 SSI 实现以下场景:

  1. Http 请求到达 Server1
  2. Server1 将请求重定向到 Server2(反向代理)
  3. Server2 returns 包含 SSI 指令的 html 页面
  4. Server1 必须解释返回页面中的 SSI 指令
  5. Server1 应向用户显示带有已解释 SSI 指令的返回页面。

.htaccess 中的以下配置工作正常,如果我尝试呈现驻留在 Server1 中的页面(在注释掉重写规则后 - RewriteRule (.*) http://172.24.0.2:80/index.html [P])

AddDefaultCharset UTF-8
RewriteEngine On
RewriteRule (.*) http://172.24.0.2:80/index.html [P]

## Enable server side includes
Options +Includes

# Filter .html files through mod_include first
AddType text/html .html
AddOutputFilter INCLUDES .html

以下是我试图包含的 SSI 指令:

<!--#echo var="DATE_LOCAL" -->

问题是,当 Server1 中的 apache 呈现页面时,它按原样显示 SSI 指令(html 注释)。

我想我错过了一些配置来告诉 apache 解释它,一旦响应在重定向后返回。

问题的根本原因:Server1 正在返回压缩内容。 默认情况下,Apache 不会将其解压缩以应用 SSI 规则。 可以用下面的2个选项解决:

选项 1:

使用 .htaccess 中的以下选项强制 Server1 中的 apache 拒绝支持压缩:

RequestHeader unset Accept-Encoding

我更新后的 .htaccess 文件如下所示:

RequestHeader unset Accept-Encoding
AddDefaultCharset UTF-8
RewriteEngine On
RewriteRule (.*) http://172.24.0.2:80/index.html [P]

## Enable server side includes
Options +Includes

# Filter .html files through mod_include first
AddType text/html .html
AddOutputFilter INCLUDES .html

选项2:

使用 .htaccess 中的以下选项使用 mod_deflate 模块解压缩传入数据:

SetOutputFilter INFLATE;DEFLATE

我更新后的 .htaccess 文件如下所示:

AddDefaultCharset UTF-8
RewriteEngine On
RewriteRule (.*) http://172.24.0.2:80/index.html [P]

## Enable server side includes
Options +Includes

# Filter .html files through mod_include first
AddType text/html .html
AddOutputFilter INCLUDES .html
SetOutputFilter INFLATE;DEFLATE

上述解决方案的 apache 配置摘录如下所示:

<Location />
   SetOutputFilter INFLATE;DEFLATE;INCLUDES
   SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|css|js|zip|gz)$ no-gzip dont-vary
</Location>

参考: http://www.apachetutor.org/admin/reverseproxies