nginx(一)nginx配置反向代理与负载均衡
最近在研究秒杀程序的设计及服务器配置。
涉及到秒杀这个问题,那肯定就意味着大流量高并发访问,那么大概率我们需要做反向代理与负载均衡配置。
那么如何配置nginx的反响代理与负载均衡呢?
一:配置服务器环境
首先,我们大概需要准备三台服务器
一台做反向代理,剩下的两台做负载均衡的演示。
反向代理服务器只需要配置nginx环境即可,因为,其只做为请求转发的中转站。
两台负载均衡服务器,需要配置lnmp环境,具体配置过程请移步《Centos7.6配置lnmp》
上边的方法是属于有那个条件的同学使用,正常一台服务器也行,在服务器上配置nginx和apache,nginx做反向代理,将请求转发至apache即可。
Lamp环境配置,请移步《LAMP环境配置及NGINX安装》
二:负载均衡配置实例
下面我先放一下我测试使用的一个nginx配置示例,具体的配置项下边会有一个大概的解释:
http{
# 配置负载均衡
# 这里的域名要和下面proxy_pass的一样
upstream guanchao.site {
# 将请求分配至最小链接
least_conn;
# 每个请求会按照访问ip的hash值分配,这样同一客户端连续的Web请求都会被分发到同一server进行处理,可以解决session的问题。如果server挂掉,能自动剔除。
# ip_hash;
# weigth参数表示权值,权值越高被分配到的几率越大
# 下面表示219.44有2分之1几率,132.2有2分之1几率
server 47.100.219.44:80 max_fails=2 fail_timeout=5s weight=1;
server 8.140.132.2:80 max_fails=2 fail_timeout=5s weight=1;
# server 111.231.162.140:80 max_fails=2 fail_timeout=5s weight=1;
}
server {
listen 80;
server_name guanchao.site;
location / {
# 配置负载均衡
proxy_pass http://guanchao.site; #请求转向taishan定义的服务器列表
proxy_set_header Host $host;#将请求头转发给后端服务器
proxy_set_header X-Forward-For $remote_addr;#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_connect_timeout 2s; 最长链接时间为2s
proxy_redirect default;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
111.231.162.140这个服务器作为反向代理服务器
47.100.219.44与8.140.132.2这两台服务器作为负载均衡服务器
以上的配置得到的效果:
我们可以看到,在同一个域名下,多次刷新,我们看到的页面是不同的,因此,证明我们上边的反向代理及负载均衡的配置是没有问题的。
三:负载均衡策略
1:轮询
这种是默认的策略,把每个请求按顺序逐一分配到不同的server,如果server挂掉,能自动剔除。
# 配置负载均衡
# 这里的域名要和下面proxy_pass的一样
upstream guanchao.site {
# weigth参数表示权值,权值越高被分配到的几率越大
# 下面表示44有2分之1几率,2有2分之1几率
server 47.100.219.44:80 max_fails=2 fail_timeout=5s weight=1;
server 8.140.132.2:80 max_fails=2 fail_timeout=5s weight=1;
}
2:最少链接
# 配置负载均衡
# 这里的域名要和下面proxy_pass的一样
upstream guanchao.site {
# 将请求分配至最小链接
least_conn;
# weigth参数表示权值,权值越高被分配到的几率越大
# 下面表示44有2分之1几率,2有2分之1几率
server 47.100.219.44:80 max_fails=2 fail_timeout=5s weight=1;
server 8.140.132.2:80 max_fails=2 fail_timeout=5s weight=1;
}
3:权重weight
# 配置负载均衡
# 这里的域名要和下面proxy_pass的一样
upstream guanchao.site {
server 47.100.219.44:80 max_fails=2 fail_timeout=5s weight=1;
server 8.140.132.2:80 max_fails=2 fail_timeout=5s weight=1;
}
4:ip_hash
每个请求会按照访问ip的hash值分配,这样同一客户端连续的Web请求都会被分发到同一server进行处理,可以解决session的问题。如果server挂掉,能自动剔除。
# 配置负载均衡
# 这里的域名要和下面proxy_pass的一样
upstream guanchao.site {
# 每个请求会按照访问ip的hash值分配,这样同一客户端连续的Web请求都会被分发到同一server进行处理,可以解决session的问题。如果server挂掉,能自动剔除。
ip_hash;
# weigth参数表示权值,权值越高被分配到的几率越大
# 下面表示44有2分之1几率,2有2分之1几率
server 47.100.219.44:80 max_fails=2 fail_timeout=5s weight=1;
server 8.140.132.2:80 max_fails=2 fail_timeout=5s weight=1;
}
以上四个策略可以组合叠加使用。
剩下配置的用处,我在nginx配置实例中都有备注。
四:其他参数
参数列表如下:
down | 表示单前的server暂时不参与负载 |
---|---|
weight | 默认为1.weight越大,负载的权重就越大 |
max_fails | 允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误 |
fail_timeout | max_fails次失败后,暂停的时间 |
backup | 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻 |
以上大概就是nginx的反响代理与负载均衡的配置,
有好的建议,请在下方输入你的评论。
欢迎访问个人博客 guanchao.site
转载自:https://juejin.cn/post/7113714684410200100