Haproxy

haproxy 強制重定向登錄並重定向回來

  • January 7, 2021

我有一個網站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 配置應該是什麼樣子的提示嗎?

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 標頭調整;您可能已經考慮並解決了這些問題。

所有這一切都是一種生硬的手段——使用者已登錄並有權訪問該站點。區分使用者的粒度並不大;如果您願意,最好將您的登錄伺服器作為代理放在另一個站點的前面。

引用自:https://serverfault.com/questions/1048974