nginx,通过身份验证提供静态文件

Dav*_*ger 5 nginx aiohttp

我正在使用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