Apache - 要下载的代理外部文件

时间:2017-03-28 15:03:32

标签: apache plone plone-4.x

考虑一下:

  • 我们有一个可以下载文件的外部服务器
  • 我们的网站(基于plone)是下载它们的界面,我们尽量隐藏直接链接
  • jquery.fileDownload插件需要在下载文件时设置cookie

我正在尝试将我们的Apache配置设置为替换这样的链接:

  • 原文:data-files-example.com/folder/subfolder/file.zip
  • 已替换:our-website-example.com/_downloads/folder/subfolder/file.zip

所以,在我的案例中缺少的部分是:如何设置Apache这样工作?

我正在尝试:

NameVirtualHost *:80
<VirtualHost :80>
    ServerAdmin email@our-website-example.com
    ServerName our-website-example.com

    RewriteEngine On
    RewriteRule "^/_downloads(.)$" "https://data-files-example.com/$1" [P] 

    RewriteCond %{REQUEST_METHOD} ^(PUT|DELETE|PROPFIND|OPTIONS|TRACE|PROPFIND|PROPPATCH|MKCOL|COPY|MOVE|LOCK|UNLOCK)$

    RewriteRule .* - [F,L]
    RewriteRule ^/(.*) http://127.0.0.1:/VirtualHostBase/http/data-files-example.com:80/my_plone_website/VirtualHostRoot/$1 [L,P]

</VirtualHost>

我收到503 Service Unavailable

如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

尝试反向代理。只需确保在Apache配置中启用了mod_proxy和mod_proxy_http,并且如果模式是根斜杠,则在Plone的VirtualHostBase规则之前设置代理规则。

ProxyPass         /_downloads     http://data-files-example.com
ProxyPassReverse  /_downloads     http://data-files-example.com

当代理到https后端时,您还需要安装mod_ssl并且指令SSLProxyEngine On。

SSLProxyEngine On
ProxyPass         /_downloads     https://data-files-example.com
ProxyPassReverse  /_downloads     https://data-files-example.com

答案 1 :(得分:1)

以下代码至少会将您的原始内容重写为您想要的目标网址:

<VirtualHost>
    SSLProxyEngine On
    RewriteEngine On

    RewriteCond %{HTTP_HOST} ^our-website-example.com$
    RewriteRule   "^/_downloads(.*)$"  "https://data-files-example.com/$1"  [P,L]
</VirtualHost>

这需要激活模块mod_sslmod_proxymod_rewrite

让我们知道这是否是您寻求的解决方案,如果没有,哪里出错:)