我一直在使用长椅+雄猫通过Apache AJP 反向代理几年来,它为我的机构提供了很大的帮助。我想迁移到桑巴达夫为访问的用户维护相同的配置长椅通过反向代理服务器。
我目前在 Davenport 反向代理的 apache 配置中使用以下指令:
ProxyPass /webfolders ajp://davenport.my.domain:8009/webfolders flushpackets=on
ProxyPassReverse /webfolders ajp://davenport.my.domain:8009/webfolders
因此,我尝试使用工作配置执行相同操作http://sambadav.my.domain/webfolders。由于我没有找到任何文档,我尝试了:
ProxyPass /webfolders http://sambadav.my.domain/webfolders
ProxyPassReverse /webfolders http://sambadav.my.domain/webfolders
这适用于网页浏览和一些 webdav 客户端(Sardine/0.0、Windows),但不适用于一些其他 webdav 客户端(gvfs/1.20.3 和其他),这些客户端可以正常与 sambadav 服务器的直接连接和与 davenport 服务器的当前代理连接一起工作。
分析流量我发现,授权后,当 SAMBADAV 向 Apache 反向代理服务器回复 OPTION 请求 200 OK 时,它会发送以下标头:
HTTP/1.1 200 OK
Date: Wed, 21 Sep 2016 09:31:13 GMT
Server: Apache/2.4.10 (Debian)
X-Sabre-Version: 3.0.9
Allow: OPTIONS, GET, HEAD, DELETE, PROPFIND, PUT, PROPPATCH, COPY, MOVE, REPORT, LOCK, UNLOCK
DAV: 1, 3, extended-mkcol, 2
MS-Author-Via: DAV
Accept-Ranges: bytes
Content-Length: 0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8
Apache 反向代理服务器将不同的标头发送回客户端:
HTTP/1.1 200 OK
Date: Wed, 21 Sep 2016 09:31:13 GMT
Vary: Accept-Encoding
Content-Encoding: gzip
Cache-Control: max-age=0, no-cache
Content-Length: 20
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8
这时客户端就会认为“服务器不支持 WebDAV”。
我怎样才能让 Apache 反向代理不过滤这些标头?
我也尝试过包括下一个地点指令没有成功。
<Location /webfolders/>
<Limit OPTIONS PROPFIND GET REPORT MKACTIVITY PROPPATCH PUT CHECKOUT MKCOL MOVE COPY DELETE LOCK UNLOCK MERGE>
Order Deny,Allow
Allow from all
Satisfy Any
</Limit>
</Location>
这些是我尝试过的使用反向代理的 webdav 客户端,其中一些不能与 SAMBADAV(和 Apache 反向代理)一起使用,但可以与 Davenport(和 Apache AJP 反向代理)一起使用
| Operating System | Client | Works? |
--------------------------------------------------------------------------------
| Linux | gvfs/1.20.3 | No |
| Linux | davfs2/1.4.7 neon/0.30.0 | No |
| MacOS X | WebDAVFS/3.0.0 (03008000) Darwin/15.6.0 (x86_64) | No |
| MacOS X | WebDAVLib/1.3 | idem |
| Windows 10 | Microsoft-WebDAV-MiniRedir/10.0.10586 | Yes |
| Android | Sardine/0.0 | Yes |
答案1
写这个问题时我注意到了标题Content-Encoding: gzip
。
这就是问题所在:我有pagespeed_module启用。禁用后,代理即可工作。因此,我修改了地点现在一切正常!
ProxyPass /WEBFOLDERS http://sambadav.iib.uam.es/webfolders
<Location /webfolders/>
ProxyPassReverse /webfolders/
<Limit OPTIONS PROPFIND GET REPORT MKACTIVITY PROPPATCH PUT CHECKOUT MKCOL MOVE COPY DELETE LOCK UNLOCK MERGE>
Order Deny,Allow
Allow from all
Satisfy Any
</Limit>
# <IfModule pagespeed_module>
ModPagespeed off
# </IfModule>
</Location>