Nginx配置location进行接口转发
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx配置location进行接口转发相关的知识,希望对你有一定的参考价值。
参考技术A生产环境中,用户首先访问网站的域名,然后由nginx监听 80 端口对请求进行转发。
例如用户发起以下请求查询汇率数据:
http://[WEB_DOMAIN]/api/v1/runtime/exchange
经过Nginx处理后到达服务端的请求则是这样的:
http://[host:port]/v1/runtime/exchange
这个请求再经过微服务的网关,找到 runtime 服务,就会访问路由为 /exchange 的接口。
了解了这个后,我们来处理需求。
跟coupons服务接口侧商定,所有关于coupons服务的接口均采用 applcationCode 和 coupons 参数进行路由映射.
举个例子:该服务部署在192.168.31.2下的8085端口,提供了一个查询接口,那么应该是这种规则:
http://192.168.31.2:8085/runtime/coupons/data
此时,前端依然保持系统原有风格进行api调用:
http://www.baidu.com/api/v1/runtime/coupons/data
那么如何实现访问 http://www.baidu.com/api/v1/runtime/coupons/data 跳转到 http://192.168.31.2:8085/runtime/coupons/data 呢?
这样,就可以使用nginx对coupons服务接口进行转发了
nginx利用反向代理调试后台接口
1、location 支持配置项目的绝对路径
2、假设我们的后台API地址是以API开头,location ^~ /api/ 代表nginx将会拦截请求地址中包含"/api/"字样的请求,其实这就是我们的ajax请求路径,拦截到请求之后根据写法会分成两种情况把这个请求转发到 下面 proxy_pass 的地址上。
举个例子:
a、如上图,如果proxy_pass 的URL以 / 结尾 ,那么请求转发的时候 将 不会 带上 匹配到的 /api/ ,也就是说如果 登录请求 URL是 localhost:60001/api/user/login,proxy_pass URL 是 http://a.xx.com:8080/platform/, Nginx将会 把这个请求转发成 http://a.xx.com:8080/platform/user/login
b、如果proxy_pass 的URL不以 / 结尾 ,那么请求转发的时候 将 会带上 匹配到的 /api/ ,也就是说如果 登录请求 URL是 localhost:60001/api/user/login,proxy_pass URL 是 http://a.xx.com:8080/platform/, Nginx将会 把这个请求转发成 http://a.xx.com:8080/platform/api/user/login
3、一般我们登录之后服务器会通过Set-Cookie把token写回到我们本地,如果不设置 proxy_cookie_path 的话,服务器Set-Cookie命令会失效,本地存不了cookie,从而导致token丢失。
这里proxy_cookie_path有一点需要注意的是 如果 proxy_pass URL 是 http://a.xx.com:8080/platform/ 这种情况 proxy_cookie_path应该设置成 /platform/ / (注意两个斜杠之间有空格)。
如果 proxy_pass URL 是 http://a.xx.com:8080/这种情况 proxy_cookie_path应该设置成 / / (注意两个斜杠之间有空格)
来自:http://blog.csdn.net/cjd6568358/article/details/51871039
以上是关于Nginx配置location进行接口转发的主要内容,如果未能解决你的问题,请参考以下文章