1、跨域解决方案
问题:访问域名与请求的地址不一致,无法返回请求结果
解决方法:
1、jsonp
只支持get请求不支持post请求
2、nginx(常用)
使用nginx代理
3、httpClient
使用httpclient进行内部请求转发
4、添加请求头
使用http响应头允许跨域设置
response.setHeader("Access-Control-Allow-Origin","*")
5、使用springcloud的zuul
1.1 CORS(跨域资源共享)解决跨域问题
设置允许请求的域名,多个域名以逗号分隔
Access-Control-Allow-Origin: http://www.YOURDOMAIN.com
设置允许请求的方法,多个方法以逗号分隔
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
设置允许请求自定义的请求头字段,多个字段以逗号分隔
Access-Control-Allow-Headers: Authorization
设置是否允许发送 Cookies
Access-Control-Allow-Credentials:true
1.2 注解CrossOrigin
在controller类上添加CrossOrigin注解表示当前类中的
所有入口函数都可以实现跨域。也可以指定某个conroller中具体的方法。
1.3 共享Cookie
Cookie的作用在于充当一个信息载体在Server端和Browser端进行信息传递,而Cookie一般是以域名为分割的,例如a.xxx.com与b.xxx.com的Cookie是不能互相访问的,但是子域名是可以访问上级域名的Cookie的。即a.xxx.com和b.xxx.com是可以访问xxx.com下的Cookie的,于是就能将顶级域名的Cookie作为OpenId的载体
2、nginx负载均衡算法
2.1 轮询机制
负载均衡可以提高网站的吞吐量,减轻单台服务器压力
默认是轮询机制
upstream backserver{
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
server {
listen 80;
server_name www.link.com;
location / {
proxy_pass http://backserver;
index index.html index.htm;
}
}
2.2 权重
按比重访问
upstream backserver{
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=2;
}
server {
listen 80;
server_name www.link.com;
location / {
proxy_pass http://backserver;
index index.html index.htm;
}
}
2.3 ip绑定
只让一个ip地址访问,
upstream backserver{
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
server {
listen 80;
server_name www.link.com;
location / {
proxy_pass http://backserver;
index index.html index.htm;
}
}
3、Nginx搭建API接口网关
B调用时为什么要走www.link.com/a?
假如A域名修改,B中所有调用点都要修改,
若通过www.link.com/a访问,只修改
对应代理地址即可。
www.link.com/a A[http://192.168.0.0/A]
nginx
www.link.com/b B[http://192.168.0.1/B]
B中调用A接口,
通过www.link.com/a访问
## 配置
server {
listen 80;
server_name www.link.com;
location /A {
proxy_pass http://a.com/A;
index index.html index.htm;
}
location /B {
proxy_pass http://b.com/B;
index index.html index.htm;
}
}
4、服务器宕机容错机制
一主一备、多主多备
高可用性
1、在主机宕机时,可以切换到备用服务器
2、nginx可能宕机,使用LVS策略
3、nginx都不能使用时,使用高可用工具keepalive重启脚本,
4、自动重启,多次重启失败发生报警,用运维人员手动重启
4.1 宕机轮询
## 主机宕机时,自动轮询下一台服务器
upstream backserver{
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
server {
listen 80;
server_name www.link.com;
location / {
proxy_pass http://backserver;
index index.html index.htm;
proxy_connect_timeout 1;
proxy_send_timeout 1;
proxy_read_timeout 1;
}
}
4.2 其他问题
- 发布新版本时,不影响用户访问
服务器可以访问,
先发布主服务器,主服务器发布成功,再部署到备服务器
- tomcat发布版本时session失效
存放到redis中
存放到数据库