Monday, May 31, 2010

通过nginx以动态地址提供静态文件服务

(这题目有些纠结,因为是从我自己的英文博客翻译来的……)

最近我在实验室做了个放在Google App Engine (GAE)上的小网站,但是GAE没法提供我需要的大文件下载,因此我们最后还是不得不自己弄了个服务器提供文件服务。我一方面不想直接提供URL,另一方面又不想失去nginx静态文件服务的性能。

我最终的办法是通过Sybren A. Stuvel写的一个纯Python的 rsa模块  来在GAE上用私钥加密文件名和当前时间,然后把加密后的url提供给用户。在文件服务器上,我通过 nginx的 X-Accel-Redirect 功能 和一个小 cherrypy 服务来解密url,验证时间,然后设置 X-Accel-Redirect header 为真实的 nginx internal地址。

在我这里这个方法工作得很好 :)