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

问题描述 投票:0回答:1

我正在使用 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 应用程序实现的身份验证机制,如上所述)

nginx aiohttp
1个回答
8
投票

这可以通过使用基于子请求结果的身份验证来实现。

可以借助

子请求身份验证
来保护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
中的内容。

© www.soinside.com 2019 - 2024. All rights reserved.