haproxy 强制重定向登录并重定向回来

haproxy 强制重定向登录并重定向回来

我有一个网站http://blahblah.com 我想在任何事情之前添加一个登录页面http://blahblah.com。我用 php 写了一些简单的登录代码。问题是我无法修改 blahblah 中的代码,它是用 rust 和其他语言编写的一些微服务。

在 login.php 中,我可以根据需要重定向到 blahblah.com。我知道如果人们访问 blahblah.com,我可以强制 haproxy 重定向到 my-login.com,然后在 my-login.com 中我可以重定向到 blahblah.com,但这可能会陷入循环。

有人可以帮助/给我一些提示,关于 haproxy 配置应该是什么样子才能使这个工作吗?

答案1

HAProxy 可能不是最好的工具,但如果不更好地了解您的架构和用法,就很难说。无论如何,其中一种方法是使用函数map来选择正确的后端。

https://www.haproxy.com/blog/introduction-to-haproxy-maps/,但大致上你会这样做

frontend frontend-blahblah
 bind *:443
 use_backend %[req.hdr(x-app-auth),map(/mnt/resource/token.map,backend-unauth)]

映射文件/mnt/resource/token.map将包含一个身份验证密钥列表,每个密钥都映射到后端backend-auth(即 blahblah.com)。没有身份验证密钥的人将被发送到backend-unauth(即您的登录服务器)。

您还需要执行以下操作:

  1. 在此示例中,应用程序必须X-App-Auth随每个请求发送标头。或者将其更改为使用 cookie,如req.cook(APPAUTH)
  2. 当用户登录或退出时,/mnt/resource/token.map登录服务器需要更新中的映射文件。请参阅上面引用的文章,了解几种执行此操作的方法。也许最简单的方法是使用http-request set-maphttp-request del-map限制对登录服务器 IP 的访问,例如让 HAProxy 监听单独的“管理端口”,并拒绝来自其他 IP 以及任何其他安全请求。例如,您的登录服务器可能会调用https://blahblah.com:8443/add-token/123456789... 添加身份验证密钥。
  3. 登录服务器需要负责设置 cookie/将身份验证密钥返回给客户端。可能存在一些跨站点问题,这意味着可能需要调整一些 HAProxy 标头;您可能已经考虑并解决了这些问题。

所有这些都是钝器——用户登录后有权访问网站或无权访问网站。没有太多的粒度来区分用户;如果您想要这样做,最好将您的登录服务器放在其他网站前面作为代理。

相关内容