Tôi đang cố gắng làm cho mẫu sau hoạt động. Tôi cần phải chỉ định một đường dẫn động trong mã phía máy khách của tôi để có thể chuyển sang một vài máy chủ định sẵn. Tôi ánh xạ các máy chủ này bằng cách thêm bí danh của chúng vào a/fwd/url. Bí danh được ánh xạ tới máy chủ thực trong nginx như sau:Proxy_pass động với bản đồ và regexp
map $uri $repoUrl {
default invalid;
~^/fwd/foo/.* http://foo.domain.nl/;
~^/fwd/bar/.* http://bar.domain.nl/;
}
Sau đó, trong phần cấu hình máy chủ, tôi bắt bất kỳ url bắt đầu bằng fwd và áp dụng giá trị bí danh được ánh xạ. Phần còn lại của url, sau khi bí danh cũng nên được thêm vào 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;
}
Nếu tôi thử nghiệm này với:
curl -i http://localhost:8080/fwd/foo/something/else
tôi nhận được:
X-FwdHost: http://foo.domain.nl/
Nhưng khi kiểm tra các kết quả từ regexp tôi nhận được:
$1: foo
$2: something/else
Vì vậy, tổng thể Nó dường như được làm việc. Regex dường như là ok, nhưng tôi không thể có được nó để nối vào một chuỗi? Bất kỳ ý tưởng hoặc là có một cách dễ dàng hơn/tốt hơn để thực hiện như vậy?
[EDIT]
Tôi đã tìm thấy cách dễ dàng hơn để thực hiện việc này bằng cách sử dụng tham số truy vấn có tên chuyển tiếp. Đầu tiên lập bản đồ các tham số truy vấn tới một máy chủ phải:
map $arg_forward $repo_forward {
default http://invalid_repo_forward/;
foo http://foo.domain.nl/;
bar http://bar.domain.nl/;
}
Sau đó, sử dụng tham số trong đường dẫn được chuyển tiếp:
location /fwd/ {
add_header X-FwdHost $repo_forward;
add_header Access-Control-Allow-Origin "*";
proxy_pass $repo_forward;
proxy_redirect off;
access_log on;
}
tôi mong chờ và url như:
http://localhost:8080/fwd/?forward=foo
Để có kết quả:
http://foo.domain.nl/
... nhưng vẫn không hiệu quả. Tôi nhận được một 404 trả lại. Tôi đang thiếu gì?
Bất kỳ cơ hội nào bạn có thể đăng bản sao "đầy đủ" của giải pháp. Tôi đang theo dõi điều này (theo như tôi có thể) nhưng vẫn nhận được 404. Alstublieft. – Guy