在apache + mod_wsgi 和 nginx + uwsgi的设置中,如何设置web服务器以代理大型"intranet“文件请求?
我正在考虑的是一种la x-sendfile的方式,但是在wsgi应用程序指向其响应中的文件URL "intranet“位置的地方,web服务器下载并将文件上传到原始请求者,而不透露它的"intranet”位置。当然,如果在wsgi应用程序端没有身份验证和访问权限检查,则不会发生任何事情。
很难通过谷歌搜索找到这种设置,甚至不确定使用哪个术语。
所谓"intranet“,我指的是通过来自代理服务器的HTTPS请求访问的文件,代理服务器可能对它们有自己的凭据,但不包括公共internet或本地文件系统(如x-sendfile的用例)。
发布于 2018-04-17 07:55:52
如果在守护进程模式中使用mod_wsgi,则可以返回带有Location响应头的空HTTP200响应,当Apache代理到mod_wsgi守护进程时,它将将其计算为子请求。其中的路径可以映射到Apache配置中的新URL处理程序,这实际上是一个代理设置,它将请求发送到另一个下游后端服务器。然后,它的响应将被代理回客户机。如果您不希望第二个URL处理程序在外部可见,也就是说,如果有人计算出URL路径,就不能直接请求它,如果它不是子请求,则需要使用mod_rewrite规则来拒绝任何请求。
所以你可能有这样的东西:
RewriteCond %{IS_SUBREQ} false
RewriteRule ^/hidden/stuff/ - [F]
ProxyPass /hidden/stuff/ http://backend.example.com/然后,WGSI响应将是空的HTTP200响应,其Location报头为:
Location: /hidden/stuff/some-file-name子请求的最终结果是:
http://backend.example.com/some-file-name针对后端服务器,将响应代理回客户端。
https://stackoverflow.com/questions/49872363
复制相似问题