当前位置:首页 > 手机资讯 > 正文

Nginx实现负载均衡以及跨域问题解决

Nginx实现负载均衡以及跨域问题解决

软负载是基于服务器安装的特定软件,比如:nginx实现负载均衡。

硬负载均衡是基于固定的硬件实现负载均衡,比如:F5。

在nginx.conf配置文件中配置如下:

 
 

Nginx负载均衡提供上游服务器(真实业务逻辑访问的服务器),负载均衡、故障转移、失败重试、容错、健康检查等。

当上游服务器(真实业务逻辑访问的服务器)发生故障时,可以转移到其他上游服务器(真实业务逻辑访问的服务器)。

upstream 主要配置如下:

IP地址和端口号:配置上游服务器的IP地址和端口

 
 

轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

 

指定权重(weight)

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。backup备用服务器,服务器全部崩溃后启动

 

IP绑定 ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

 

fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

 

url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

 

上述同样也是一个极简的监听8081端口的nginx服务,当请求url为/get时,会走url_hash;同样配置了upstream模块,hash $request_uri表明了是按照url规则进行hash策略。

  1. 分布式session的问题—使用springSession解决或者使用Token替代解决。
  2. 分布式重复任务调度—分布式任务调度平台 xxl-job
  3. 分布式日志收集的问题—elk + kafka 日志收集
  1. alias是一个目录别名的定义。
  2. root是最上层目录的定义。

区别:alias后面必须要用“/”结束,否则会找不到文件的。而root可有可无。

两个命令的作用:都是指定静态文件的目录。

页面中请求的ajax地址如果与页面请求地址域名和端口、协议不同的话,浏览器采用安全策略,请求能够正常到达服务器端,但是无法获取响应结果。

  1. 响应头设置允许跨域权限 response.setHeader(“Access-Control-Allow-Origin”, “*”); 适合于小公司

  2. 使用jsonp解决网站跨域问题 缺点:只能支持Get请求 模拟脚本提交。

  3. 使用Nginx搭建API保持域名和端口一致 Location

  4. 使用微服务中的Zuul

  5. HttpClient实现转发 缺点:重复发送两次请求

配置案例:

使用Nginx搭建API保持域名和端口一致。下面配置根据请求路径的不同将请求转发给不同的域名、端口去处理。

 
 

实际开发中前后端分离

通过指定模式来与客户端请求的URI相匹配,基本语法如下:location [=||*|^~|@] pattern{……}

  1. ~ #区分大小写的正则匹配

  2. ~* #不区分大小写的正则匹配

  3. ^~ #普通字符匹配,如果此选项匹配成功,忽略其他匹配选项,一般用来匹配目录

  4. = #普通字符精确匹配

1、没有修饰符 表示:必须以指定模式开始(也就是请求链接以kaico开头),如:

 
 

2、=表示:必须与指定的模式精确匹配(也就是请求链接必须一致)

 
 

3、~ 表示:指定的正则表达式要区分大小写

 
 

4、^~ 表示:指定的正则表达式区分大小写,如果此选项匹配成功,忽略其他匹配选项(停止向下搜索),一般用来匹配目录

 

5、~* 表示:指定的正则表达式不区分大小写

 
 

匹配优先级

最新文章