有思俱乐部学习园地

nginx反向代理配置介绍


一 概述

反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。

二、 配置项:

1、轮询

轮询是upstream的默认分配方式,即每个请求按照时间顺序轮流分配到不同的后端服务器,如果某个后端服务器down掉后,能自动剔除。

 upstream backend {
            server 192.168.1.101:8888;
            server 192.168.1.102:8888;
            server 192.168.1.103:8888;
        }
            

2、weight

轮询的加强版,即可以指定轮询比率,weight和访问几率成正比,主要应用于后端服务器异质的场景下。

  upstream backend {
            server 192.168.1.101 weight=1;
            server 192.168.1.102 weight=2;
            server 192.168.1.103 weight=3;
        }

3、ip_hash

每个请求按照访问ip(即Nginx的前置服务器或者客户端IP)的hash结果分配,这样每个访客会固定访问一个后端服务器,可以解决session一致问题。如果后端服务器down掉,要手工down掉。

 upstream backend {
             ip_hash;
            server 192.168.1.101:7777;
            server 192.168.1.102:8888;
            server 192.168.1.103:9999;
        }

4、fair(第三方插件)

fair顾名思义,公平地按照后端服务器的响应时间(rt)来分配请求,响应时间短即rt小的后端服务器优先分配请求。

upstream backend {
            server 192.168.1.101;
            server 192.168.1.102;
            server 192.168.1.103;
             fair;
        }

5、url_hash(第三方插件)

与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景下。

 upstream backend {
            server 192.168.1.101;
            server 192.168.1.102;
            server 192.168.1.103;
             hash $request_uri;
             hash_method crc32;
        }

其中,hash_method为使用的hash算法,需要注意的是:此时,server语句中不能加weight等参数。

例:
upstream dafen {   #负载均衡设置,自己定义名字
	server 172.16.10.31:80 weight=1 max_fails=2 fail_timeout=30s;
	#server指向的服务器地址
	# fail_timeout:表示如果请求受理失败,暂停指定的时间之后重新发起请求
	# max_fails:表示失败最大次数,超过失败最大次数暂停服务
}

upstream dafennode {
	server 172.16.10.51:1399 weight=1 max_fails=2 fail_timeout=30s;
}

server {
	listen 80;  #监听80端口
	server_name dafen.1473.cn;   #用来指定ip地址或者域名,多个配置之间用空格分隔
	location /#表示匹配访问根目录
	{
		proxy_pass http://dafen;  #对应upstream
		proxy_set_header Host $host;   #设置HTTP头部,设置Host
		proxy_set_header X-Forwarded-For $remote_addr; #XFF头部,表示HTTP的请求端真实的IP
	}
	location ~*\/node/(.*) {  # 指向/node/
		proxy_pass http://dafennode;   #对应upstream
		proxy_set_header Host $host;
		proxy_set_header X-Forwarded-For $remote_addr;
		set $a $1;  #设置变量
		rewrite ^/(.*)$ /$a break;   #重写
	}
}

工作人员

 
作者:
信息录入: