如何通过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)服务器只能访问局域网。
答
我想通了这个问题的答案按照这里的教程: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”
我认为这可能是服务器故障中最好的问题,因为实现此目的的方式可能是sendfile和Nginx的组合。 Rails将简单地重定向到签名位置,并且可以通过Nginx和代理完成繁重的工作。也请看http://wiki.nginx.org/XSendfile。 – 2011-02-03 16:57:33