Nginx的使用(反向代理,负载均衡)

在我目前的工作内容中,接触到Nginx的用处无外乎两点:

1. 反向代理,解决前端跨域的问题

  工作内容有门户的概念,就是将各个子系统集成到门户里,在门户里面访问,这样就很容易造成跨域的问题

  那么解决的办法就是给子系统配置Nginx,通过代理来访问,使门户和子系统在同一IP下。

  具体的配置如下:(实际上就是给真实地址配置个代理IP,proxy_pass?)

    主要看server节点内容

      下面这个配置做到,访问192.168.40.240:80时,会返回http://192.168.110.102:8000的资源。 可以配置多个server...即多个子系统

 1     server {
 2         listen       80;  # 监听端口为80
 3         server_name  localhost;  # 服务器名
 4         location / {
 5             add_header Access-Control-Allow-Origin *;
 6             proxy_set_header   Host             192.168.40.240;    # 代理服务器IP
 7             proxy_set_header   X-Real-IP        $remote_addr;
 8             proxy_pass http://192.168.110.102:8000;  # 代理目标地址
 9             proxy_intercept_errors on; #拦截异常
10             client_max_body_size    1000m;#文件上传大小
11 
12      }

2. 负载均衡,这应该是最常见的软负载了吧。

    

 1   upstream mh_server {    # 集群名称
 2         ip_hash; #解决session问题(建议子系统使用)
 3         server 192.168.110.102:8000 weight=10;    # 服务器1的访问地址, weight:分配权重。
 4         server 192.168.40.158:7004 weight=10;  # 服务器2的访问地址, weight:分配权重。
 5     }
 6 
 7     server {
 8         listen       80;
 9         server_name  mh_server; # 集群名称
10         location / {
11                     add_header Access-Control-Allow-Origin *;
12                     proxy_set_header   Host             192.168.40.158; # 集群服务器IP
13                     proxy_set_header   X-Real-IP        $remote_addr;
14                     proxy_pass http://mh_server;  # 集群名称
15   proxy_intercept_errors on; #拦截异常        
16            
17 }

 这里需要注意的是ip_hash是负载均衡的一种资源分配策略,默认是轮训,这种ip_hash是跟前客户端ip进行哈希计算,导致请求会固定请求到一太固定的服务器上。 

 这样就解决了分布式部署的情况下session不共享的问题。

下面额外介绍一下Nginx支持的负载均衡调度算法方式:

weight轮询(默认):接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。

ip_hash:每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。

fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块

url_hash:按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在nginx作为静态服务器的情况下提高缓存效率。同样要注意nginx默认不支持这种调度算法,要使用的话需要安装nginx的hash软件包

原文地址:https://www.cnblogs.com/haoerlv/p/10020492.html