我正在使用 aiohttp 开发一个 Web 应用程序,其中用户身份验证是通过 aiohttp-security 实现的。我使用 nginx 进行服务器部署。配置的灵感来自 aiohttp 文档,看起来像:
location /api {
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
proxy_buffering off;
proxy_pass http://127.0.0.1:8080/api;
}
Web 应用程序的一部分类似于相册。我希望由 ngninx 提供照片以提高性能。我的配置目前看起来是这样,它可以工作,但绕过身份验证:
location /photos {
root /srv/web/photos/;
try_files $uri =404;
}
如何让
nginx
仅向经过身份验证的用户提供照片? (由 python 应用程序实现的身份验证机制,如上所述)
这可以通过使用基于子请求结果的身份验证来实现。
可以借助
子请求身份验证来保护
static/media
位置。
考虑
static/media
位置:/media/
文件
nginx.conf
:
[…]
location /media {
auth_request /auth;
#...
}
location = /auth {
internal;
proxy_pass https://yourauthserver/is_authenticated;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
#...
}
[…]
/is_authenticated
这是您的 Web 应用程序检查用户是否经过身份验证的位置。
仅当
static/media
返回状态码is_authenticated
时,才会提供200
中的内容。