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;
}

原文地址:https://www.cnblogs.com/labtabhub/p/12164179.html