我正在使用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;
}
Run Code Online (Sandbox Code Playgroud)
Web 应用程序的一部分类似于相册。我希望照片由 ngninx 提供以提高性能。我的配置现在看起来像,它可以工作但绕过身份验证:
location /photos {
root /srv/web/photos/;
try_files $uri =404;
}
Run Code Online (Sandbox Code Playgroud)
如何使nginx
照片仅提供给经过身份验证的用户?(由 python 应用程序实现的身份验证机制,如上所述)
小智 8
这可以通过使用基于子请求结果的身份验证来实现。
可以借助子请求身份验证来保护静态/媒体位置。
考虑静态/媒体位置:/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 "";
#...
}
...
Run Code Online (Sandbox Code Playgroud)
/is_authenticated
这是您的 Web 应用程序检查用户是否经过身份验证的位置。
is_authenticated
仅当返回状态代码时才会提供静态/媒体服务200
。