我在 DMZ 中运行 Apache 2.2.15 作为反向代理。我在内部网络上有一个应用程序,我通过反向代理将其发布到 Internet 上供员工使用。
作为此应用程序的一部分,工作人员可以看到带有 PDF 附件的消息。内部工作人员(无需通过反向代理)可以顺利下载这些 PDF。外部工作人员则不能。
这是我在应用程序服务器上的 Apache 日志中看到的内容。
172.20.0.9 - - [04/Dec/2014:08:48:21 +1300] "GET /application/home/getAttachment/MTE7Y3lzdGljIGZpYnJvc2lzLnBkZg%3D%3D HTTP/1.1" 200 88090
10.0.0.2 - - [04/Dec/2014:08:48:27 +1300] "GET /application/home/getAttachment/MTE7Y3lzdGljIGZpYnJvc2lzLnBkZg== HTTP/1.0" 400 -
第一个请求来自成功下载 PDF 文件的内部用户。第二个请求来自 DMZ 中的反向代理。请注意它如何将 URL 末尾的“%3D%3D”转义为“==”。
我在反向代理中做了几件事。首先,如果有人尝试进入根目录,重写规则会将其发送到应用程序目录。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^/$ /application/ [NE,R]
</IfModule>
配置的另一个相关部分是反向代理部分。
<IfModule mod_proxy.c>
RequestHeader set Front-End-Https "On"
SSLProxyEngine on
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
SetEnv proxy-initial-not-pooled 1
# Reverse Proxy
ProxyPass /application https://server.internal.lan/application
ProxyPassReverse /application https://server.internal.lan/application
</IfModule>
有人能告诉我如何停止取消转义这些 URL 吗?
谢谢
大卫
答案1
重写规则中的 [NE] 标志将其设置为“无转义”。请尝试将其更改为 [B] 以转义反向引用。