简介
Nginx
(engine x) 是一个高性能的 HTTP
和 反向代理
web服务器 ,同时也提供了 IMAP
/ POP3
/ SMTP
服务。
反向代理
反向代理通常是作为负载均衡来分发流量给后端的应用程序服务器,以此来提高性能。比如前端是一台 Nginx
作为负载均衡的分发器,后端是多台 Apache
搭建的 Web Server
,当访问流量很大时,就让 Nginx
分发请求给后端多台服务器,让它们分工响应。 Nginx
实现负载均衡用到的模块是 proxy_pass
代理模块,通过该模块将客户端请求转发到一组 upstream
服务池,所以还需要用到 ngx_http_upstream_module
模块,该模块只能配置于 http
字段中,支持的代理方式有 proxy_pass
fastcgi_pass
memcached_pass
。
正向代理与反向代理的区别
- 正向代理与反向代理的区别在于代理的对象不一样。正向代理的对象是客户端,反向代理的对象是服务端。
- 做正向代理时,当客户端发起请求其访问目标应该是后端真实服务器。
- 做反向代理时,客户端发起请求其目标应该是代理服务器本身,但由代理服务器把后端真实服务器上的数据发给了客户端。
Nginx常用负载均衡算法
- 轮询(默认算法):每个请求会依次分配给后端不同的应用程序服务器,不理会后端服务器的实际压力
- 加权轮询:权重越大的服务器,被分配到的次数就会越多,通常用于后端服务器性能不一致的情况
- IP HASH:当同IP进行重复访问时会被指定到上次访问到的服务器,可以解决动态网站
SESSION
共享问题
upstream模块中的常用参数说明
- server:负载均衡后端服务器的IP或域名,不写端口的话默认是80。高并发场景用域名,再通过DNS进行负载均衡
- weight:后端服务器权重,默认为1,权重越大接收的请求越多。例:weight=5
- max_fails:检查节点的健康状态并允许请求失败的次数,达到该次数就将节点下线。默认为1,0表示禁止失败尝试。例:max_fails=2
- fail_timeout:max_fails失败次数达到限制后暂停该节点服务的时间,默认是10秒。例:fail_timeout=10s
- backup:热备配置,当服务池中所有服务器均出现问题后会自动上线backup服务器
- down:标志服务器不可用,不参与负载均衡。这个参数通常配合IP_HASH使用
- max_conns:限制最大连接数,通常对后端服务器硬件不一致的情况进行配置
upstream test_upstream {
server 192.168.1.110 down; #该节点不可用
server 192.168.1.120 backup; #其他节点挂了后该节点自动上线
server 192.168.1.130 max_failes=1 fail_timeout=10s weight-5;
server test.test_upstream.cn 8080 weight=3
}
Nginx负载均衡
轮询负载
http { #upstream模块包含在http模块下
upstream myserver{ #定义upstream名字,下面会引用
server 192.168.1.100; #指定后端服务器地址
server 192.168.1.110; #指定后端服务器地址
server 192.168.1.120; #指定后端服务器地址
}
server {
listen 80;
server name www.myserver.com;
location / {
proxy_pass http://myserver; #引用upstream
}
}
}
在上面的例子中,当用户访问
www.myserver.com
站点时,Nginx
会负载平衡分配给后端的三个服务器。使用ab
做压力测试可以看到在加了负载均衡后Time per request
(每个请求平均消耗时间)降低、Request per second
(每秒请求数)提升。如果没有配置upstream
模块而只使用proxy_pass
模块,可以实现反向代理的作用。
加权负载均衡
http {
upstream myserver{
server 192.168.1.100 weight=3; #指定后端服务器地址,权重为3
server 192.168.1.110;
}
server {
listen 80;
server name www.myserver.com;
location / {
proxy_pass http://myserver;
}
}
}
在上面配置中,每3个请求都分配给192.168.1.100,然后第4个请求会分配给192.168.1.110,如此循环下去。
IP HASH负载均衡
upstream myserver {
ip_hash; #采用IP HASH算法
server 192.168.1.100;
server 192.168.1.110;
server 192.168.1.120;
}
如果需要将客户与后端一台服务器
绑定
起来,可以使用ip-hash
负载平衡。这样可以确保来自相同客户机的请求总是指向相同的服务器除非该服务器不可用
基于URL的HASH,当客户端多次访问同一个地址时分配到固定的节点
upstream myserver {
hash $request_uri;
server 192.168.1.100;
server 192.168.1.110;
server 192.168.1.120;
}
最少连接数轮询
http{
upstream sampleapp {
least_conn;
server <<dns entry or IP Address(optional with port)>>;
server <<another dns entry or IP Address(optional with port)>>;
}
....
server {
listen 80;
...
location / {
proxy_pass http://sampleapp;
}
}
}
原文链接
【Nginx配置】使用upstream和proxy_pass实现反向代理与负载均衡:https://blog.csdn.net/qq_41049126/article/details/96978519
本文由 feng 创作,采用 知识共享署名4.0
国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:2021-03-08 00:00:00