如何通过rails应用程序代理来自防火墙服务器的文件

如何通过rails应用程序代理来自防火墙服务器的文件

问题描述:

我有一个在Nginx上运行的rails应用程序,它需要提供从另一个内部服务器下载的文件。内部服务器使用动态url生成要下载的文件,因此它不是位于文件夹中的静态文件。包含文件的导轨服务器和服务器位于同一LAN上,但只有导轨服务器在端口80上向公众开放。如何通过rails应用程序代理来自防火墙服务器的文件

此外,我想要服务的文件在5GB-200GB的任何位置,所以我如果可能的话,不想在整个下载过程中绑定Rails进程。有没有办法与Net :: HTTP + send_data做到这一点?或者也许某种Nginx代理规则?

从LAN内部,你可以下载一个文件,这样的网址:

http://username:[email protected]/export?uuid=1234567890 

的问题是1)没有该URL没有访问控制,与用户名/密码,您可以下载任何文件你想通过传递它的uuid参数和2)服务器只能访问局域网。

+0

我认为这可能是服务器故障中最好的问题,因为实现此目的的方式可能是sendfile和Nginx的组合。 Rails将简单地重定向到签名位置,并且可以通过Nginx和代理完成繁重的工作。也请看http://wiki.nginx.org/XSendfile。 – 2011-02-03 16:57:33

我想通了这个问题的答案按照这里的教程:http://kovyrin.net/2010/07/24/nginx-fu-x-accel-redirect-remote/

要处理,你需要这行添加到您的nginx配置HTTP基本身份验证:

proxy_set_header Authorization "Basic BASE64_USER_PASS"; 

哪里BASE64_USER_PASS是用户名和密码的base64字符串格式为“user:pass”