私は次のパターンを働かせようとしています。あらかじめ定義されたいくつかのホストに切り替えるには、クライアント側のコードに動的パスを指定する必要があります。これらのホストは/ fwd/urlにエイリアスを追加してマップします。そして、サーバ設定の一部で、私はFWDで始まる任意のURLをキャッチし、マッピングされたエイリアス値を適用マップと正規表現を使用した動的proxy_pass
map $uri $repoUrl {
default invalid;
~^/fwd/foo/.* http://foo.domain.nl/;
~^/fwd/bar/.* http://bar.domain.nl/;
}
:エイリアスは、このようなnginxの実サーバにマッピングされています。エイリアスの後にURLの残りの部分は、同様にURLに追加する必要があります。
location /fwd/(\w+)/(.*)$ {
add_header X-FwdHost "$repoUrl$2";
add_header Access-Control-Allow-Origin "*";
proxy_pass "$repoUrl$2";
proxy_redirect off;
access_log on;
}
私はこれをテストした場合:
curl -i http://localhost:8080/fwd/foo/something/else
私が手:
X-FwdHost: http://foo.domain.nl/
しかし、私は取得正規表現のテスト結果:だから、全体的な
$1: foo
$2: something/else
それは働いているようだ。正規表現は大丈夫ですが、1つの文字列に連結することはできません。任意のアイデアや同じ/簡単な方法を実現するには?
[EDIT]
は、私は前方という名前のクエリパラメータを使用することによって、これを実行する可能性がはるかに簡単な方法を発見しました。
map $arg_forward $repo_forward {
default http://invalid_repo_forward/;
foo http://foo.domain.nl/;
bar http://bar.domain.nl/;
}
次に転送されるパスのパラメータを使用します:
location /fwd/ {
add_header X-FwdHost $repo_forward;
add_header Access-Control-Allow-Origin "*";
proxy_pass $repo_forward;
proxy_redirect off;
access_log on;
}
私は期待してのようなURLになります。
まず右のホストにクエリパラメータをマップhttp://localhost:8080/fwd/?forward=foo
結果:
http://foo.domain.nl/
...でもこれは機能しません。私は404を返します。私は何が欠けていますか?
解決策の「完全な」コピーを投稿することができます。私はこれを(私ができる限り)続けているが、まだ404を得ている。 Alstublieft。 – Guy