如何设置代理请求 a-la x-sendfile 的授权?

How to setup authorization for proxy request a-la x-sendfile?

在 apache + mod_wsgi nginx + uwsgi 的设置中,设置网络服务器代理大 "intranet" 文件的方法可能是什么请求?

我正在考虑的是一种 la x-sendfile 的方式,但是 wsgi 应用程序在其响应中指向文件 URL "intranet" 位置,网络服务器下载并上传向原始请求者提交文件,但不透露其 "intranet" 位置。当然,如果wsgi应用端没有认证和访问权限检查,什么也不会发生。

很难通过谷歌搜索找到这种设置,甚至不知道使用什么术语。

"intranet" 我的意思是文件,可以通过来自代理服务器的 HTTPS 请求访问,这些文件可能有自己的凭据,但不是来自 public 互联网或本地文件系统(就像是x-sendfile 的用例)

如果在守护进程模式下使用 mod_wsgi,您可以 return 一个空的 HTTP 200 响应和 Location 响应 header 当 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 响应将是空的 HTTP 200 响应 Location header of:

Location: /hidden/stuff/some-file-name

子请求最终会是:

http://backend.example.com/some-file-name

针对后端服务器,将响应代理回客户端。