最近自己在搞后端采用分布式多台服务器部署,然后前后端分离的开发方式,页面在使用window.location.href 跳转方式或者其它前端的跳转方式的时候,再向后端应用服务器请求Cookie sessionid总是获取不到,这个怎么办,仔细分析后原来是跨域的问题,前端我使用了Hbuilder开发工具,默认用它起的服务都是8020端口的,但是我向后台请求是其它端口,这就相当于我又新打开了一个页面进行服务器的请求所以没有Cookie没有追踪到sessionId。
解决思路:既然前端服务器后端的服务器不是同一个域下,我可以对外提供统一访问地址,然后通过过滤的方式把对应用服务器的请求转发到应用服务器。这里我使用了nginx服务器来解决这个问题。
1.下载Nginx Window版本并且配置(正式部署建议使用Linux版本在)
下载地址:http://nginx.org/en/download.html
配置路径在nginx-1.12.0\conf下
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; upstream abroad{ ip_hash; server 127.0.0.1:8089; } server { listen 80; server_name localhost; location /{ proxy_pass http://abroad; proxy_redirect default; } location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css|woff|woff2|ttf|map|json)$ { root D:/web/abroad; expires 7d; } } }简单说明: server 代表的是应用服务器地址 location是 有拦截的文件类型2.配置ngnix前端页面文件路径
由于我还想用Hbuilder或者是Webstorm这类的前端开发工具这个路径就指定前端项目所在路径,我就可以实时看页面效果了。
3.启动与关闭ngnix服务器
cmd进入到ngnix所在的目录执行ngnix.exe启动服务 ngnix.exe -s stop关闭服务
4.测试sessionId还是是否丢失
这个时候查看sessionId是否在请求头中已经存在。 如图所示: