我試圖讓下面的模式工作。我需要在客戶端代碼中指定一個動態路徑才能切換到幾個預定義的主機。我通過將他們的別名附加到/ fwd/url來映射這些主機。別名被映射到真實服務器在nginx的是這樣的:動態proxy_pass與地圖和正則表達式
map $uri $repoUrl {
default invalid;
~^/fwd/foo/.* http://foo.domain.nl/;
~^/fwd/bar/.* http://bar.domain.nl/;
}
然後在服務器配置部分,我發現任何開頭的網址FWD和應用映射的別名值。別名之後的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
所以整體它似乎在工作。正則表達式似乎是好的,但我不能把它連接成一個字符串?任何想法或有更容易/更好的方式來實現相同?
[編輯]
我發現了一個可能是更容易的方式來做到這一點,使用名爲前進的查詢參數。首先查詢參數映射到正確的主機:
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;
}
我希望和網址,如:
http://localhost:8080/fwd/?forward=foo
產生於:
http://foo.domain.nl/
...但這仍然無效。我得到一個404返回。我錯過了什麼?
任何機會,您可以發佈一個「完整」的解決方案的副本,請。我遵循這個(儘可能),但仍然得到404的。 Alstublieft。 – Guy