• nginx反向代理与负载均衡


    1nginx反向代理

    反向代理设置是在location配置项中配置,可以根据请求路径前缀,设置多个反向代理,几多个location配置

    server {
            listen       8089;
            server_name  localhost;
            #charset koi8-r;
            #access_log  logs/host.access.log  main;
    		root   html/devops;
            index  index.html index.htm;
    		location / {
    			try_files $uri $uri/ /index.html;
            }
    		
    		location /oauth2/oauth {
    			proxy_pass http://172.16.161.53:80;  #反向代理的地址
    			proxy_set_header Host $host;   #设置请求头 可以多个      
        proxy_connect_timeout 90;                #与代理服务器的连接超时时长
        proxy_send_timeout 90;                     #后端服务器的数据回传时间,在规定的时间内没有回传完数据,nginx也会断开这个连接
        proxy_read_timeout 90;					   #nginx等待代理服务器的响应时间,超过设置的时间还没收到响应,nginx将断开这个连接
        proxy_buffer_size 4k;                         #设置缓冲区大小
        proxy_buffers 4 32k;						   #设置缓冲区个数,大小
        proxy_busy_buffers_size 64k;			   #设置系统忙碌时可以使用的proxy_buffers大小,官方推荐为proxy_buffers*2
        proxy_temp_file_write_size 64k;		   #/指定proxy缓存临时文件的大小
        proxy_redirect off;								#设置是否修改返回给客户端的信息中location,如何设置为off,location为设置的代理服务器地址 
        proxy_next_upstream http_502 http_504 http_503 error timeout invalid_header;  //请求出错后,转向下一个节点
    		}
    }
    

    反向代理时路径映射关系
    1、例如:nginx反向代理配置如下:

    location /ucUserApp/ {
    			proxy_pass http://server/ucUserApp/;  #反向代理的地址
    }
    

    这样配置就是所有以/ucUserApp/开头的请求,都会被转发到http://server/ucUserApp/这个地址。
    例如http://localhost:4200/ucUserApp/home 实际请求地址为http://server/ucUserApp/home
    有时候,做代理的时候不太想要这个前缀,就需要把proxy_pass中配置改为如下http://server/
    这样,还是上面的请求地址,实际请求地址就为http://server/home了,把前缀ucUserApp去掉了

    2、路径匹配中有无/的区别

    location /ucUserApp/ {
    			proxy_pass http://server;  #反向代理的地址
    }
    location /ucUserApp/ {
    			proxy_pass http://server/;  #反向代理的地址
    }
    

    这两种配置区别只在于 proxy_pass配置的路径最后面有没有 “/” ,
    假如访问路径为http://server/myapp/index.html

    当 proxy_pass 配置的路径以 “/” 结尾(第二种配置), 经过nginx代理之后,路径会变为 http://server/index.html,会直接把路径代理到server的根目录下
    当proxy_pass配置的路径不以"/"结尾(第一种配置),经过nginx代理之后,路径会变为 http://server/myapp/index.html, 只会把原路径的的ip,端口改变,路径地址不变

    2负载均衡

    当后台服务器是集群是,不能只设置单个的代理地址了,这时候就涉及到负载均衡了。负载均衡简单配置如下

    server {
            listen       8089;
            server_name  localhost;
            #这里定义一个名为tomcat_server的负载均衡池 地址不要加http
    		upstream tomcat_server{  
       				 server   10.254.244.20:81 weight=1 max_fails=2 fail_timeout=30s;
        			 server   10.254.242.40:81 weight=1 max_fails=2 fail_timeout=30s;
       				 server   10.254.245.19:81 weight=1 max_fails=2 fail_timeout=30s;
       				 server   10.254.243.39:81 weight=1 max_fails=2 fail_timeout=30s;
      #weight 指的是采用权重策略的权重值
      # max_fails :连接失败后,在fail_timeout 定义的时间段内尝试重新连接此主机的次数,这个数值默认为1,设置为0失败后就不在尝试连接此主机
      # fail_timeout: 定义重新尝试连接的时间
      #这里设置 30秒内如果尝试2次连接还没连接上该主机,就会认为该主机不可用
      }
    		root   html/devops;
            index  index.html index.htm;
    		#这里的proxy_pass就是协议+定义的负载均衡池名字
    		location / {
    			proxy_pass http://tomcat_server;  #反向代理的地址
            }
    }
    

    2.1负载均衡策略

    1、权重策略
    配置方法就是在负载均衡池的每个server后面加上权重值 : weight=值
    1、权重值越大,被负载的请求比率就越大。
    2、此策略可以与least_conn和ip_hash结合使用。
    2、轮询策略
    默认负载均衡策略
    1、server后面配置的参数
    fail_timeout:与max_fails配合使用,设置一定时间内,尝试一定次数重新连接主机,没连接上就标志该主机不可用
    max_fails:见上
    backup:标志该主机为备用主机,当主服务器down掉,请求都会被代理到该主机
    down:标志该主机永久停机
    2、在轮询中,如果服务器down掉了,会自动剔除该服务器。
    3、缺省配置,使用的就是轮训策略
    3、ip_hash策略
    1、配置,在负载均衡池中加上ip_hash。
    upstream tomcat_server{
    ip_hash
    server 10.254.244.20:81 weight=1 max_fails=2 fail_timeout=30s;
    server 10.254.242.40:81 weight=1 max_fails=2 fail_timeout=30s;
    server 10.254.245.19:81 weight=1 max_fails=2 fail_timeout=30s;
    server 10.254.243.39:81 weight=1 max_fails=2 fail_timeout=30s;
    }
    2、该策略基于客户端IP的分配方式,确保相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问
    一个后 端服务器,可以解决session不能跨服务器的问题。
    3、在nginx版本1.3.1之前,不能在ip_hash中使用权重(weight)。
    4、ip_hash不能与backup同时使用。
    5、此策略适合有状态服务,比如session。
    6、当有服务器需要剔除,必须手动down掉。

    4、least_conn
    该策略会把把请求转发给连接数较少的后端服务器
    1、配置,在负载均衡池中加上least_conn 。
    upstream tomcat_server{
    least_conn
    server 10.254.244.20:81 weight=1 max_fails=2 fail_timeout=30s;
    server 10.254.242.40:81 weight=1 max_fails=2 fail_timeout=30s;
    server 10.254.245.19:81 weight=1 max_fails=2 fail_timeout=30s;
    server 10.254.243.39:81 weight=1 max_fails=2 fail_timeout=30s;
    }

  • 相关阅读:
    学习Vue CLI 3.x版本的安装以及创建项目
    Java中同一线程中的对象hashcode一样
    Java中线程范围内共享问题
    Java中的线程池模拟
    java中的Switch
    string、stringbuffer、stringbuild的时间性能对比
    Java中lock上锁 unlock解锁
    java中的三目运算
    Java中的Instanceof
    一个简单的for循环
  • 原文地址:https://www.cnblogs.com/labtabhub/p/12164179.html
Copyright © 2020-2023  润新知