我们遇到了由CDN (内容分发网络)提供的SVG文件的跨域问题,因此这些文件来自与我们的主域不同的域名,即Python/Django应用程序。我们想要设置一个特殊的视图,它可以作为这些SVG文件的服务器端代理,以屏蔽域名并绕过跨域问题。问题是如何对静态文件(如SVG或其他类型的文件(.jpg、.js、.png、.mp4等))的url发出快速http请求。并且一旦我们从请求流接收到组块就在组块的流式http响应中为它们提供服务。
我们意识到在Django和WSGI之外做这件事可能会更快,也许twisted server会更好,所以最终我们正在寻找最快/最好的Python方法来完成我们需要的东西。真的在寻找推荐解决方案的示例代码。
非常感谢!
发布于 2012-11-08 15:36:13
你可以把nginx放在Apache的前面,它会有很多好处,比如更好的静态文件服务(让它来处理静态文件,而不是Apache),以及将Apache/mod_wsgi与慢客户端隔离。这样做之后,您可以让Django应用程序生成X-Accel-Redirect标头,nginx将解释这些标头并发出新的sub请求。该子请求的目标URL可以是在nginx中设置的代理定义,用于从CDN获取文件并返回它们,就像它们是对原始请求的响应一样。
发布于 2012-11-08 15:28:22
所以我有几个可能的解决方案。第一个是python,但这可能不是您的最佳选择。
1)在twisted.web.proxy中使用reverse proxy server扭曲船舶。这里有一个非常简单(但很有效)的on their site示例
2)根据您的应用(如现代浏览器),在您的CDN配置中添加CORS响应头可能适合您。为了检查,您的应用程序(浏览器?)尝试对SVG资源发出GET请求(带有"Origin:“http标头),但随后拒绝呈现它?
如果是这样的话,您可能会忽略浏览器的同源需求。源可以通过返回Cross-Domain-Allow-Origin: *或类似的标头以及对带有Origin:标头的HTTP请求的响应来放宽这一要求。
根据CDN,我可能会澄清/提供示例元数据,以启用跨域请求的CORS响应头
3)一定要用python做反向代理吗?apache和nginx都有经过良好测试的模块,可以在不使用Python的情况下实现流式反向代理。尝试用python做这件事可能很有趣和/或令人钦佩,但它不会像直接在HTTP服务器中那样扩展到相同的性能级别
https://stackoverflow.com/questions/13274816
复制相似问题