最近自己在搞后端采用分布式多台服务器部署,然后前后端分离的开发方式,页面在使用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是否在请求头中已经存在。 如图所示: