【问题标题】:Global auth_request for nginxnginx 的全局 auth_request
【发布时间】:2018-06-12 08:13:26
【问题描述】:

我有一台服务器,我在其中使用 nginx 运行多个子域站点

每个子域在配置中都有一个 server { ... } 块(在 sites-enabled 中)

我想添加一个全局动态身份验证后端(另一个 http 站点),它将检查请求的子域并授予访问权限或询问用户凭据

所以流程应该是这样的

request stie1.example.com ---> [auth check in database] 
                                /              \
                              no               yes
                              /                  \
            show username/pass form        pass to site1.example.com

我找到了 auth_request 模块 - 但仅关于 server 上下文的示例

我希望它在顶级上下文 (http 上下文) - 当然 location 指令不可用

所以基本上我想要的是一种全局 nginx 中间件,我可以在其中运行一些代码(即 python)来检查用户是否有权查看其中一个托管域

有什么建议吗?

【问题讨论】:

  • 您可以创建一个通用身份验证配置,代理传递到同一端点并将其包含在每个 server 块中,如 include auth_proxy.conf;
  • 有趣的问题,这里似乎没有解决方案,因为在 http 级别可以做的很少。如果您可以管理服务器级别,那么@aergistal 建议的简单包含似乎是最可行的方法

标签: nginx


【解决方案1】:

如果您为您想要完成的事情提供实际上下文,这可能会有所帮助。

根据http://nginx.org/r/auth_request,auth_request 指令实际上被允许在location 上下文的“两个”级别上 - 在server 和http 上下文中,所以,绝对没有什么应该阻止您为 nginx 实例中的每个 server 全局启用它。

否则,如果您希望它仅在某些 location 指令和/或仅某些 server 配置中启用,那么您始终可以在任何上下文中使用 include 指令,如 http://nginx.org/r/include。

【讨论】:

  • auth_request 设置用于执行实际身份验证的 uri。即使它是在 http 上下文中定义的,仍然需要为每个服务器定义相应的位置 - 从中​​没有太大的好处
  • @feast,您是说请求 URI 必须是相对的吗?我还没有尝试过,我想 nginx 有这样的限制可能是有意义的,但是为什么在服务器上下文之外允许该指令是没有意义的。任何人都可以确认吗?
  • 我尝试将它与 http:// 前缀一起使用,它只是被解析为针对我使用的服务器配置的位置。你可以自己试试,我可能漏掉了什么
猜你喜欢
  • 2017-03-18
  • 1970-01-01
  • 1970-01-01
  • 2015-10-17
  • 1970-01-01
  • 2020-01-31
  • 2018-03-08
  • 1970-01-01
  • 2013-10-22
相关资源
最近更新 更多