我有一個特定的場景,我需要根據查詢引數路由到不同的后端:
https://edge1.cdn.com/file.zip?{secure_link}&{tokens}&route=aws1
aws1 的位置是http://edge1.amazonwebservices.com
如果它的 aws2 那么代理后端將是http://edge2.amazonwebservices.com
等等......但我仍然沒有想出如何做到這一點。
uj5u.com熱心網友回復:
您可以使用map指令從$arg_route變數(包含route查詢引數的值)中獲取代理主機名:
map $arg_route $aws {
aws1 edge1.amazonwebservices.com;
aws2 edge2.amazonwebservices.com;
...
default <default_hostname>;
}
server {
...
# if you want to proxy the request, you'd need a 'resolver' directive
resolver <some_working_DNS_server_address>;
location / {
# if you want to proxy the request
proxy_pass http://$aws;
# or if you want to redirect the request
rewrite ^ http://$aws$uri permanent;
}
}
如果您不想在沒有route查詢引數的情況下提供請求,您可以省略塊中的最后default一行,map并將以下if塊添加到您的服務器配置中:
if ($aws = '') {
return 403; # HTTP 403 denied
}
如果你需要代理你還需要一個請求resolver指令(你可以閱讀關于它的一些技術細節此文章)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/315301.html
