ウェブサイトを持っています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 はこれに最適なツールではないかもしれませんが、アーキテクチャと使用方法をよく理解しなければ何とも言えません。とにかく、方法の 1 つは、関数を使用して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)]
マップ ファイルには、バックエンド (例: blahblah.com)/mnt/resource/token.map
にそれぞれマップされる認証キーのリストが含まれますbackend-auth
。認証キーを持たないユーザーは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 ヘッダーの調整が必要になる可能性があります。すでに検討して解決している可能性があります。
これらはすべて、ユーザーがログインしていて、サイトにアクセスする権限があるかどうかという、鈍器です。ユーザーを区別する細分性はあまりありません。細分性が必要な場合は、ログイン サーバーをプロキシとして他のサイトの前に配置する方がよいでしょう。