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; #重写
}
}