NASのアプリケーションをポート番号として参照するのではなく、覚えやすいサブドメインを使用したいので、HAproxyをNASのリバースプロキシに設定しました。
ポートだけでなく、特定のルートを参照するいくつかのバックエンド「サーバー」を除いて、それを機能させました。
たとえば、私が欲しいnav.mydomain.comバックエンドを指す127.0.0.1:9000/modules/navigator/www/login.phphttps://unix.stackexchange.com/posts/420303/edit
私の最初の考えは、バックエンドを次のように構成することでした。
frontend http-in
bind *:80
mode http
acl nav hdr_beg(host) -i nav
use_backend nav_node if nav
backend nav_node
mode http
server nav-server 127.0.0.1:9000/modules/navigator/www/login.php check
しかし、明らかにそれほど単純ではありません...だから私はこの問題をどのように処理するかを研究するのにもっと時間を費やし、reqrepに関するトピックを見つけました。それは私にとってやや中国的なようです...これが私がここに参加することにした理由です。これを理解するのに役立ちます。
今はこれがうまくいきたいので、後でSSLを追加したいと思います。
答え1
これらの要件は、明確に理解するには面倒すぎる場合が多い。あなたはそれを使用することができますset-path
http-request set-path /modules/navigator/www%[path]
フロントエンドまたはバックエンドにあります。その後、要求があるかどうかを/modules/navigator/www/login.php
確認できます。/login.php
必要に応じて要求を再作成することもできます/
。/login.php
答え2
有効なコマンドが見つかるまで reqrep を続行します。私はこれらのキャラクターが何をしているのかよく理解していません。おそらく多すぎるかもしれませんが、動作します!
reqrep ^([^\ :]*)\ /(.*) \1\ /modules/navigator/www/\2
server nav-server 127.0.0.1:9000 check
答え3
/
まず、login.php URLを要求するためにディレクトリ(仮想ホストnav.example.comなど)が必要ないと思います。たとえば、リクエストすると/whatever
どうなりますか?に渡す必要がありますか/modules/navigator/www/login.php/whatever
?おそらくそれはただ一つの/modules/navigator/www/
方法です。必要に応じて空の要求を上書きできます/login.php
。
/
次のように書き直す必要があるとします/modules/navigator/www/
。
server nav-server 127.0.0.1:9000 check
reqrep ^GET\ /(.*) GET\ /modules/navigator/www/\1
^
は行の先頭なので、パスが先頭に追加されます。