Nginx实现反向代理和负载均衡

编程之家收集整理的这篇文章主要介绍了Nginx实现反向代理和负载均衡编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

Nginx的代理功能与负载均衡功能是最常被用到的,本文主要简述代理,反向代理,负载均衡的相关知识点,及利用Nginx实现反向代理和负载均衡的操作步骤,仅供学习分享使用,如有不足之处,还请指正。

Nginx的代理功能负载均衡功能是最常被用到的,本文主要简述代理,反向代理,负载均衡的相关知识点,及利用Nginx实现反向代理和负载均衡的操作步骤,仅供学习分享使用,如有不足之处,还请指正。

什么是代理?

比如,在国内由于国情原因,谷歌网站屏蔽,无法访问,就需要设置代理服务器进行访问,代理服务器通过解析客户端请求,发送给服务端,并接收服务端返回信息,然后返回给客户端。在此过程中,服务端并不知道客户端是哪一个,只跟代理服务器进行通信,以达到隐藏客户端身份的目的。再比如,当在外公司外面,需要访问公司内网,则需要通过VPN进行连接,VPN也是代理服务器的一种。代理示意图如下所示:

什么是反向代理?

对于访问量高的系统,一台服务器是无法满足性能上的要求,通常都会部署多台服务器来满足实际的需要,如:百度,谷歌等大型搜索引擎。这个时候,通常都会设置一个入口来分发不同的请求到各个服务器上。实际上用户并不知道访问的是哪一台服务器,这样就很好的隐藏了服务端,也减少了服务器暴露的风险。在此过程中,充当访问入口的服务器,就是反向代理服务器,示意图如下:

正向代理和反向代理的区别主要看代理服务器是在客户端,还是服务端。是为了隐藏客户端,还是为了隐藏服务端。

什么是负载均衡?

在实际项目的服务器部署过程中,有的服务器性能好,有的服务器性能差,如果所有的访问机会都是均等的,则会造成有的服务器不堪重负,有的服务器又会造成资源浪费,所以负载均衡就是为了让每一个资源都得到最大限度的合理利用。Nginx提供负载均衡内置策略为轮询,加权轮询,Ip hash三种,以下三种负载均衡策略分别介绍

轮询方式是认的负载均衡策略,每一个服务资源被分配到的机会都是均等的,示意图如下所示:

加权轮询,及根据特殊的需要,每一个资源按不同的权重(百分比)被分配利用,以达到合理利用资源的目的,示意图如下:

ip hash,

用户第一次访问时,采用轮询或加权轮询的访问分配资源,然后对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。 示意图如下:

Nginx实现反向代理

反向代理和负载均衡相辅相成,互为一体,所以合并一起分析。反向代理,隐藏服务提供方,步骤如下:

 1. 加两个虚拟服务主机节点,如下所示:

 1     server {
 2        Listen 8080;
 3        server_name localhost;
 4        location / {
 5           root HTML2;
 6           index index.HTML index.htm;
 7        }
 8     }
 9 10        Listen 808111 12        location /13           root HTML3;
14 15 16     }

截图如下:

2. 增加upstream负载均衡节点,两个服务分别指向8080,8081两个虚拟主机,如下所示:

1     # 增加一个负载均衡节点
2     upstream www.alan.hsiang.com {
3        server 192.168.127.132:80804        server 192.168.127.132:80815     }

截图如下:

3. 增加服务节点的,配置代理服务列表,如下所示:

proxy_pass 用于指向定义的服务列表

 1     新增一个服务节点
 2  3        Listen 80 4        server_name wwww.alan.hsiang.com;
 5        location / 6           root HTML3;
 7           index index.HTML index.HTML;
 8           proxy_pass http://www.alan.hsiang.com;
10     }

截图如下所示:

4. 切换到 /usr/local/Nginx/sbin目录下,启动Nginx,如下所示:

5. 打开浏览器,输入域名。

Nginx认的负载均衡策略为轮询方式,则可以看到,输入域名后,随着刷新页面,两个端口内容交替出现,如下所示:

8080端口服务,如下所示:

8081端口,内容如下:

Nginx实现负载均衡

负载均衡节点,配置权重【8080端口服务有1/3的机率,8081端口服务有2/3的机率】如下所示:

3        server 192.168.127.132:8080 weight=14        server 192.168.127.132:8081 weight=25     }

截图如下:

然后重新加载Nginx即可,在浏览器刷新页面,则会发现8080被调用次数大约占比1/3,8081被调用次数大约占比2/3 。

Nginx的ip hash策略

ip_hash:Nginx会让相同的客户端ip请求相同的服务器。对于session在服务端的存储有很大的作用,不然对于同一个客户端,如果每次访问的服务节点都不同,则无法判断是否登录等需要通过session判断的内容。采用ip_hash则让同一客户端每次都访问同一个服务器,避免需要重复登录问题

5        ip_hash;
6     }

配置负载均衡,除了weight外,还有其他一些参数,如下所示:

  1. down,表示当前的server暂时不参与负载均衡。
  2. backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。
  3. max_fails,允许请求失败的次数认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误
  4. fail_timeout,在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用

以上就是Nginx配置反向代理和负载均衡的相关知识点,旨在抛转引玉,共同探讨。

备注

晓出净慈寺送林子方

【作者】杨万里 【朝代】宋

毕竟西湖六月中,风光不与四时同。

接天莲叶无穷碧,映日荷花别样红。

总结

以上是编程之家为你收集整理的Nginx实现反向代理和负载均衡全部内容,希望文章能够帮你解决Nginx实现反向代理和负载均衡所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

Nginx文章

caddy 有个http.nobots nobots保护你的网站免受网络爬虫和机器人,可以给采集的恶意程序返回特定的数据。
Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,并且cp
Nginx的代理功能与负载均衡功能是最常被用到的,本文主要简述代理,反向代理,负载均衡的相关知识点,及利用Nginx实现反向代理和负载均衡的操作步骤,仅供学习分享使用,如有不足之处,还请指正。
问题背景 最近偶然对线上域名配置的nginx IP进行直接访问后,发现http居然是可以通的,而https直接IP访问浏览器会报证书不安全的提示,点击详细查看发现是固定返回了nginx配置的某一个ap
Git Hooks Git 能在特定的重要动作发生时触发自定义的脚本。 这些脚本都被存储在 Git 目录下的 hooks 子目录中( )。当 git init 初始化一个仓库时,Git 默认会在这个目
macOS Sierra 11.12 已经帮我们预装了 Ruby、PHP(5.6)、Perl、Python 等常用的脚本语言,以及 Apache HTTP 服务器。由于 nginx 既能作为 HTTP
启动uwsgi出现no internal routing support, rebuild with pcre support使用如下命令,记录下,方便后人需要注意的是pip install uwsg
报这个错,我们可以去查看错误日志,进入如下目录 错误信息如下: 解决办法,在/data/下创建 wwwlogs目录,重启nginx即可 systemctl restart nginx 成功启动!!!
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注