根據(jù)不同的version訪問不同的版本服務,或者訪問不同的服務器,或者根據(jù)不同的host訪問不同的內網(wǎng)服務器
實現(xiàn)原理
利用auth_request,當請求某個nginx的某個連接的時候,先去請求auth_request,再根據(jù)auth_request的返回動態(tài)設置代理url
nginx的配置
location /private/ {
auth_request /auth;
auth_request_set $url $sent_http_url;
proxy_pass $url;
...
}
location = /auth {
proxy_pass ...
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
}
在controller代碼中
public Object authRequest(HttpServletRequest request,
HttpServletResponse servletResponse){
...
//獲取原請求地址
System.out.println("X-Original-URI:"+request.getHeader("X-Original-URI"));
...
servletResponse.setHeader("url", "http://www.baidu.com");//返回新的地址
...
}
根據(jù)參數(shù)動態(tài)代理
nginx的配置
location /private/ {
set $req_version $arg_ReqVersion; # 將參數(shù)ReqVersion設置到變量req_version
auth_request /auth;
auth_request_set $url $sent_http_url;
proxy_pass $url;
...
}
location = /auth {
proxy_pass ...
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header ReqVersion $req_version; # 通過header傳遞參數(shù)
proxy_set_header X-Original-URI $request_uri;
}
需求
auth_request 需要nginx的 ngx_http_auth_request_module模塊