通过Openresty提取具体URI代理到指定BackendServer以解决CORS问题 OpenrestyCORSLuaURI
程序员文章站
2024-01-30 12:14:46
...
通过Openresty提取具体URI,代理到指定BackendServer,以解决CORS问题,
一、问题场景
Browser请求https//biz4h5.company.com/xxx/yyy
而biz4h5.company.com要访问前后台分离的后台接口,https//biz4api.company.com/aaa/bbb
如果biz4h5.company.com和biz4api.company.com的解析ip不同,会导致CORS问题,关于CORS
的具体产生,可参考本人另一篇文章。
注意:CORS三要素,protocol,ip,port有一者不同,就会导致CORS
通过biz4h5.company.com所在的Openresty,统一代理到后台节点,改为如下方式:
https//biz4h5.company.com/xxx/yyy =>访问H5资源
https//biz4h5.company.com/backendapi/aaa/bbb =>访问后台接
口,https//biz4api.company.com/aaa/bbb
二、样例代码如下:
【温馨提示】
如果您觉得满意,可以选择支持下,您的支持是我最大的动力:
一、问题场景
Browser请求https//biz4h5.company.com/xxx/yyy
而biz4h5.company.com要访问前后台分离的后台接口,https//biz4api.company.com/aaa/bbb
如果biz4h5.company.com和biz4api.company.com的解析ip不同,会导致CORS问题,关于CORS
的具体产生,可参考本人另一篇文章。
注意:CORS三要素,protocol,ip,port有一者不同,就会导致CORS
通过biz4h5.company.com所在的Openresty,统一代理到后台节点,改为如下方式:
https//biz4h5.company.com/xxx/yyy =>访问H5资源
https//biz4h5.company.com/backendapi/aaa/bbb =>访问后台接
口,https//biz4api.company.com/aaa/bbb
二、样例代码如下:
location / { proxy_pass http://yourbackendserver; if ( $request_uri ~* ^\/backendapi\/(.*) ) { content_by_lua ' local raw_uri = ngx.var.uri local sent_uri = string.gsub(raw_uri, "(/%w+)", "", 1) ngx.req.set_header("host", "biz.company.com") ngx.req.set_uri(sent_uri) ngx.exec("@gateway") '; } location @gateway{ proxy_set_header X-Real-IP $remote_addr; proxy_set_header remote_addr $remote_addr; proxy_pass https://biz.company.com:5443; } # the following codes have been escaped }
【温馨提示】
如果您觉得满意,可以选择支持下,您的支持是我最大的动力: