Nginx动态代理

根据不同的version访问不同的版本服务,或者访问不同的服务器,或者根据不同的host访问不同的内网服务器

实现原理

利用auth_request,当请求某个nginx的某个连接的时候,先去请求auth_request,再根据auth_request的返回动态设置代理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");//返回新的地址
    ...
}

根据参数动态代理

nginx的配置

location /private/ {
    set $req_version $arg_ReqVersion;   # 将参数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传递参数
    proxy_set_header X-Original-URI $request_uri;
}

需求

auth_request 需要nginx的 ngx_http_auth_request_module模块

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容