Django / Python将URL中的文件作为http代理快速流提供

时间:2012-11-07 17:18:47

标签: python django http proxy twisted

我们对从CDN(内容传送网络)提供的SVG文件存在跨域问题,因此来自与我们的主域(即Python / Django应用程序)不同的域名。我们想设置一个特殊的视图,可以作为这些SVG文件的服务器端代理来掩盖域名并解决跨域问题。问题是如何对SVG等静态文件或其他类型(.jpg,.js,.png,.mp4等)的URL进行快速http请求,并在分块流式http响应中尽快为它们提供服务我们从请求流中收到块。

我们意识到在Django和WSGI之外做这个可能会更快,也许twisted server会更好,所以最终我们正在寻找最快/最好的Python方法来完成我们需要的东西。真的在寻找推荐解决方案的示例代码。

非常感谢!

2 个答案:

答案 0 :(得分:2)

您可以将nginx放在Apache之前,这将带来各种好处,例如更好的静态文件服务(IOW让它处理静态文件而不是Apache)并将Apache / mod_wsgi与慢速客户端隔离。完成后,您可以让您的Django应用程序生成X-Accel-Redirect标头,nginx将解释这些标头并发出新的子请求。该子请求的目标URL可以是nginx中的代理定义设置,用于从CDN获取文件并返回它们,就像它们响应原始请求一样。

答案 1 :(得分:1)

所以我有几个可能的解决方案。第一个是python,但这可能不是你最好的选择。

1)twisted.web.proxyreverse proxy server的扭曲船只。有一个非常简单(但有效)的例子on their site

2)根据应用程序(例如,现代浏览器),在CDN配置中添加CORS响应标头可能对您有用。要检查,您的应用程序(浏览器?)是否尝试对SVG资源发出GET请求(带有“Origin:”http标头),但是然后拒绝呈现它?

如果是这样,您可能会绊倒浏览器的同源要求。原点可以通过返回Cross-Domain-Allow-Origin: *或类似标题以及带有Origin:标题的HTTP请求的响应来放宽此要求。

根据CDN,我可以澄清/提供示例元数据,以便为跨源请求启用CORS响应标头

3)你绝对需要使用python作为反向代理吗? apachenginx都有非常好的测试模块,用于在不使用Python的情况下实现流反向代理。尝试使用python执行此操作可能很有趣和/或令人钦佩,但它不会像在HTTP服务器中直接进行相同的性能级别那样扩展