我有一个快速的小技巧,我认为可以为需要登录的网站提供安全的上传功能。
基本上,你可以按照 Authentication Based on Subrequest Result | NGINX Documentation 的说明为上传功能配置子请求认证。唯一的问题是,我无法找到一个在开启“需要登录”时返回 403/401 状态的 URL,因此未登录时访问上传链接会返回 500 错误。这种情况只会发生在有人获得了上传 URL 却在未登录状态下尝试访问时,所以看起来问题并不严重。
实现方式大致如下:
# JP
location = /auth {
internal;
proxy_pass http://discourse/categories;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
}
# END JP
location ~ ^/uploads/ {
auth_request /auth; #$JP
# 注意:我们无法在顶层定义头信息并继承,这确实很烦人。
#