Nignx 反向代理和负载均衡

反向代理

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

nginx.conf 配置文件如下:

#运行用户
#user nobody;
#启动进程,通常设置成和cpu的数量相等
worker_processes 1;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#PID文件,记录当前启动的nginx的进程ID
#pid logs/nginx.pid;

#工作模式及连接数上限
events {
worker_connections 1024;
}

http {

#设定mime类型(邮件支持类型),类型由mime.types文件定义
include       mime.types;
default_type  application/octet-stream;

#设定日志
#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
#                  '$status $body_bytes_sent "$http_referer" '
#                  '"$http_user_agent" "$http_x_forwarded_for"';

#access_log  logs/access.log  main;

#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
#必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
sendfile        on;
#tcp_nopush     on;


#连接超时时间
#keepalive_timeout  0;
keepalive_timeout  65;

#gzip压缩开关
#gzip  on;

#设定实际的服务器列表  默认的负载均衡是轮询算法
#upstream zp_server1{
#    server 127.0.0.1:8089;
#}

#HTTP服务器
server {
    #监听9079端口,用于HTTP协议
    listen       9079;
#定义使用http://172.25.154.161:端口号...访问
    server_name  172.25.154.161;
    
    #指向webapp的目录
    #root D:\...\webapp;

#编码格式
    charset utf-8;

#反向代理的路径(可以和upstream绑定),location 后面设置映射的路径
    location / {
      proxy_pass   http://172.25.154.165/;
     # root   html;
     # index  index.html index.htm;
    }
    

}

server {
listen 8651 ;
server_name ***;

    location / {
      proxy_pass   http://***:8651/;
     # root   html;
     # index  index.html index.htm;
    }

    
}

server {
listen 10086 ;
server_name ***;

    #静态文件,nginx自己处理
    location ~ ^/(images|javascript|js|css|flash|media|static)/ {
        root D:\01_Workspace\Project\github\zp\SpringNotes\spring-security\spring-shiro\src\main\webapp\views;
        #过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。
        expires 30d;
    }

    #设定查看Nginx状态的地址
    location /NginxStatus {
        stub_status           on;
        access_log            on;
        auth_basic            "NginxStatus";
        auth_basic_user_file  conf/htpasswd;
    }

    #禁止访问 .htxxx 文件
    location ~ /\.ht {
        deny all;
    }
    
    #错误处理页面(可选择性配置)
    #error_page   404              /404.html;
    #error_page   500 502 503 504  /50x.html;
    #location = /50x.html {
    #    root   html;
    #}

}

负载均衡原理

1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

upstream server{
    server ip1;
    server ip2;
}

2、权重 weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的 。
情况。

upstream server{
    server ip1 weight=3;;
    server ip2 weight=2;
}

权重越高,在被访问的概率越大,如上例,分别是30%,70%。

3、ip_hash( IP绑定)
上述方式存在一个问题就是说,在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。

我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

upstream server{
    ip_hash;
    server ip1 ;
    server ip2;
}

4、fair(第三方插件)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream server {
    server server1;
    server server2;
    fair;
}

哪个服务器的响应速度快,就将请求分配到那个服务器上。

5、url_hash(第三方插件)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

upstream backserver {
      server server1;
    server server2;
    hash $request_uri;
    hash_method crc32;
}

场景:如果现在我们的电商项目出现了一个爆品,那个访问这个爆品的请求会增多。
若此时使用 url hash ,那么请求会压到同一台服务器上,这样显然是不合理的

参数说明

down : 表示当前的server暂时不参与负载
weight :默认为1。 weight越大,负载的权重就越大。
max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回 proxy_next_upstream 模块定义的错误
fail_timeout :max_fails 次失败后,暂停的时间。
backup : 其它所有的非 backup 机器down或者忙的时候,请求 backup 机器。所以这台机器压力会最轻。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值