使用 Apache,如何使用反向代理解释从另一台服务器返回的页面上的 SSI?
With Apache, how to interpret SSI on a page returned from another server using reverse proxy?
使用 apache,我尝试使用 SSI 实现以下场景:
- Http 请求到达 Server1
- Server1 将请求重定向到 Server2(反向代理)
- Server2 returns 包含 SSI 指令的 html 页面
- Server1 必须解释返回页面中的 SSI 指令
- 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>
使用 apache,我尝试使用 SSI 实现以下场景:
- Http 请求到达 Server1
- Server1 将请求重定向到 Server2(反向代理)
- Server2 returns 包含 SSI 指令的 html 页面
- Server1 必须解释返回页面中的 SSI 指令
- 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>