您的位置:首页 > 运维架构 > Nginx

微信授权域名允许子域名,前后端分离nginx做子域名静态页面映射,解决nginx跨域以及ajax跨域

2017-09-01 16:10 806 查看
因公司需求,前后端需彻底分离,由nginx映射静态页面,另外设置节点访问接口。本来微信授权域是做在接口上的,现在多出h5静态页面的域名,网上教程允许子域名授权大多都是配置在授权回调域名下的页面多做了一次跳转,拿到code之后再跳转到其他域名下的页面,但是这样会牺牲用户体验实现子域名授权。

经过公司技术顾问指导,得到一个更好的办法解决子域名授权问题,用户访问接口授权,授权成功后生成加密token,将token保存至服务器,同时保存从微信授权得到的用户信息,再将token写进cookie之中,子域名之间共享cookie,跳转到的子域名将cookie传回服务器,服务器判断该token是否有效,有效则返回用户信息。用户则不需要再次授权。

Nginx映射静态文件坑了很长时间,本来的思路是通过

location / {
root   html;
index  index.html index.htm;
}


用location 匹配访问的地址进行页面返回,但是location之中的root灰将匹配到的location➕root作为路径,进行资源的返回。但是前端不肯所有页面都使用同一地址访问。

后来使用alias解决

location / {
alias   /html/;
index  index.html index.htm;
}


注意我的alias 后面的html有➕/

这也是个坑,root中的路径最后可以加/也可以不加/,都可以找得到地址,但是alias中的路径必须要加/,加/,加/

但是当输入的路径更为复杂的时候就变成了404,nginx的location的取反的正则我是一直都没弄出来,最后通过一条配置解决了需求。

location / {
try_files $uri $uri/ /index.html;
}


通过try_files配置所有的uri都取请求index.html 的文件,这是我们老板研究出来的。

走完这个静态文件的坑就开始走跨域的坑

http://gamefu.github.io/2016/04/14/nginx-https-and-cors/

就不多说了,都走完之后,开始访问的时候发现直接请求接口的时候的cookie是带着的,但是当通过h5的域名去访问接口的时候cookie就一直没出现在header中,最后通过http://blog.csdn.net/wzl002/article/details/51441704

这个帖子的启发修改了ajax的跨域带cookie的功能。一切正常
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息