Nginx代理转发解决跨域问题

微信扫一扫,分享到朋友圈

Nginx代理转发解决跨域问题

有如下两个服务(或多个服务),各服务通过Redis做Session共享以实现单点登录。其中登录走的是API服务,前端通过Cookie来维持登录状态。在API服务登录之后,在所有服务中这个用户(Token)都是登录是登录状态的。

WEB:https://web.guitu18.com
API:https://api.guitu18.com
... // 其他服务

因为登录走的是API服务,那么Cookie的作用域是api.guitu18.com,这时候访问WEB项目,WEB后台虽然知道这个用户(token)是登录的,但因为请求是从web.guitu18.com域发起的,WEB服务是无法获取api.guitu18.com域下的Cookie的。

提升Cookie作用域

那么现在需要解决跨域问题,因为是同一顶级域下的服务,我们之前的做法是将Cookie作用域提升到顶级域下,这时候二级域是能够获取到顶级域下的Cookie的(Cookie作用域是向下兼容),那WEB服务也就能够拿到这个用户的Token识别登录状态了。

后台设置Cookie作用域为: .guitu18.com

服务端代理

现在我们升级为Nginx代理来解决跨域问题,方式是通过对接口路径前缀进行匹配来实现。约定API服务中所有的接口路径以 api
开头,WEB服务在请求API服务时不用指向API域名,而是指向自身域名 https://web.guitu18.com
,然后在Nginx中对WEB域下以 api
开头的路径进行代理,转发到API服务。配置如下:

server {
listen       443;
server_name  web.guitu18.com;
... # SSL、日志等其他配置
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:18085; # 走WEB服务
}
location /api/ {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:18080;# 以api开头的接口转发到API服务
}
}

这样对于前段来说,所有接口都是走的WEB服务的域名,由服务器来对不同服务的接口进行分发,那么前台也就不存在跨域问题了。

微信扫一扫,分享到朋友圈

Nginx代理转发解决跨域问题

专家告诉你,为什么儿童体检很重要

上一篇

瑞幸之后,华尔街不会再为商业模式造假企业买单

下一篇

你也可能喜欢

Nginx代理转发解决跨域问题

长按储存图像,分享给朋友