Apache - 代理外部文件下载
Apache - Proxy external files to download
考虑一下:
- 我们有一个可以下载文件的外部服务器
- 我们的网站(基于 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/" [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/ [L,P]
</VirtualHost>
我收到了503 Service Unavailable
。
如何解决这个问题?
以下代码至少将您给定的原件-重写为您想要的目标-URL:
<VirtualHost>
SSLProxyEngine On
RewriteEngine On
RewriteCond %{HTTP_HOST} ^our-website-example.com$
RewriteRule "^/_downloads(.*)$" "https://data-files-example.com/" [P,L]
</VirtualHost>
这需要激活模块 mod_ssl
、mod_proxy
和 mod_rewrite
。
让我们知道这是否是您寻求的解决方案,如果不是,哪里出了问题:)
尝试反向代理。只要确保在你的 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 指令。
SSLProxyEngine On
ProxyPass /_downloads https://data-files-example.com
ProxyPassReverse /_downloads https://data-files-example.com
考虑一下:
- 我们有一个可以下载文件的外部服务器
- 我们的网站(基于 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/" [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/ [L,P]
</VirtualHost>
我收到了503 Service Unavailable
。
如何解决这个问题?
以下代码至少将您给定的原件-重写为您想要的目标-URL:
<VirtualHost>
SSLProxyEngine On
RewriteEngine On
RewriteCond %{HTTP_HOST} ^our-website-example.com$
RewriteRule "^/_downloads(.*)$" "https://data-files-example.com/" [P,L]
</VirtualHost>
这需要激活模块 mod_ssl
、mod_proxy
和 mod_rewrite
。
让我们知道这是否是您寻求的解决方案,如果不是,哪里出了问题:)
尝试反向代理。只要确保在你的 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 指令。
SSLProxyEngine On
ProxyPass /_downloads https://data-files-example.com
ProxyPassReverse /_downloads https://data-files-example.com