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 配置應該是什麼樣子的提示嗎?
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
(即您的登錄伺服器)。您還需要執行以下操作:
- 在此範例中,應用程序必須
X-App-Auth
隨每個請求發送標頭。或者將其更改為使用 cookie,而不是像req.cook(APPAUTH)
.- 當使用者登錄或註銷時,
/mnt/resource/token.map
登錄伺服器需要更新地圖文件。有關執行此操作的幾種方法,請參閱上面引用的文章。也許最簡單的方法是使用http-request set-map
和http-request del-map
限制對登錄伺服器 IP 的訪問,例如讓 HAProxy 在單獨的“管理埠”上偵聽並拒絕來自其他 IP 以及任何其他安全性的請求。例如,您的登錄伺服器可能會呼叫https://blahblah.com:8443/add -token/123456789 …。添加身份驗證密鑰。- 登錄伺服器將需要負責設置 cookie/將身份驗證密鑰返回給客戶端。可能存在一些跨站點問題,這意味著可能需要進行一些 HAProxy 標頭調整;您可能已經考慮並解決了這些問題。
所有這一切都是一種生硬的手段——使用者已登錄並有權訪問該站點。區分使用者的粒度並不大;如果您願意,最好將您的登錄伺服器作為代理放在另一個站點的前面。