跨域处理
问题由来:浏览器拒绝执行其它域名下的 ajax 运作
如果浏览器在 www.baidu.com对应的html页面内,发起 ajax 请求偷盗 www.taobao.com 域名下的内容来填充自己的页面,整个互联网秩序将混乱. 为了防止这种混乱,W3C 组织制定了浏览器安全规范,即html页面发起的 ajax请求仅限于同域名后端范围,跨越域名的ajax请求不得执行,此为跨域问题。
在日常工作中,我们自己有多个子系统,避免不了要有跨越子系统的ajax请求,此时我们希望自己内部的各个子系统不必有这种跨域限制
cors解决方案
W3C制定跨域限制的本意,是防止页面领域安全混乱,即防止A公司不经B公司同意,使用ajax盗取B公司的服务内容。 出于这个本意,W3C改进了跨域的方案,即:如果B公司同意将自己的内容分享给A公司,跨域限制可放开,此方案即CORS方案,如下图:
nginx 跨域配置
对于比较简单的 http 请求(GET、POST、HEAD 类型),无须浏览器来问,nginx 服务器直接 在响应头部,加入同意跨域的信号即可
对于复杂的 http 请求(PUT、DELETE、含 json 格式数据),浏览器会在发请求前,先发一道 OPTION 请求来询问。我们在 Nginx 上直接配置对此询问的回答即可
以上两步Nginx配置,跨域问题解决,对业务毫无侵入性。
防盗链
目的
让资源只能在我的页面内显示,不能被其它页面直接引用
解决方案
浏览器发起的任何请求,在其 request 头部,都会标注其请求发起地的 URL,如下:
Nginx 配置
压缩
/html/js/css 压缩一下再传输,通常可减少 50%的体积
浏览器在发送请求时,会附带自己支持的压缩方式:
nginx 配置
https 配置
对称加密
安全隐患:钥匙除我之外,还有多个人拥有。泄露风险较大,钥匙传递的过程风险较大
非对称加密
优缺点:私钥很安全。但是非对称算法开销很大,大批量应用于业务,会导致性能成本过高
https加密方案
1、业务数据的加密使用对称加密,降低性能开销
2、对称密钥,采用非对称加密,保驾护航
Nginx配置https
-
前提
查看nginx是否已经安装好了https模块
Nginx配置https需要两个东西。一个是浏览器证书(内含公钥,供浏览器加密使用),一 个是私钥(供自己解密使用)server.crt 和 server.key 可以去购买商业的。 -
自签证书
自签证书生成过程如下(前提是机器里装好了openssl程序):
Nginx 内的配置如下:
Nginx 高可用
- lvs思想解决高可用问题
如上图,由服务器集群虚拟出来一台虚拟网关vip(不真实存在,自然不存在宕机问题), 此vip由两台机器共同协商生成。当有一台机器宕机时,另一台机器一样能维持vip。这保证了,只要两台机器不同时宕机,vip就存在 - keepalived配置lvs过程
前提
1.关闭 selinux,打开/etc/sysconfig/selinux 设置其中值 SELINUX=disabled
2.安装必须的依赖包 yum -y install libnl libnl-devel libnfnetlink-devel
安装keepalived
wget https://www.keepalived.org/software/keepalived-1.3.4.tar.gz
配置(指定安装目录和配置目录,否则文件太散乱)
./configure --prefix=/usr/local/keepalived --sysconf=/etc
make && make install
keepalived主机配置
打开/etc/keepalived/keepalived.conf,只需要配置如下一段
启动keepalived,通过命令ip addr查看机器ip地址,可发现多出一个244.200 的ip,此时使用原ip地址244.253能打开的页面,使用244.200也能打开
keepalived 从机配置
从机配置与主机过程完全一样,配置文件内以下标识id与优先级稍作变化即可
启动从机的keepalived后,可发现其ip地址无变化
keepalived校验lvs效果
1、此时,杀掉主机上的keepalived,244.200的ip将从主机上消失。而出现的从机的ip中
2、再次启动主机的keepalived,244.200的ip将被主机重新夺回
3、此效果是单主单备方式。备机资源有一定的浪费。可以重复前面的动作,虚拟出第二个ip,将主从机优先级颠倒,从而利用起备机服务
keepalived监控服务软件
a、使用keepalived来监控nginx
编辑一个 sh 监控脚本,sh 脚本:
b、在配置文件中加入以下两处配置:
c、重启 keepalived,测试监控效果,如下图操作: