专栏首页IT大咖说Nginx反向代理、动静分离和负载均衡

Nginx反向代理、动静分离和负载均衡

反向代理

反向代理可以理解为客服端和服务端沟通经过一个代理,代理来分发请求

Nginx通常被用作后端服务器的反向代理,这样就可以很方便的实现动静分离,以及负载均衡,从而大大提高服务器的处理能力。

常用配置

第二种配置方式用了upstream,可以为之后负载均衡做准备

动静分离

动静分离,动态内容如php,jsp的页面必须由服务端动态处理,就转发到tomcat之类的容器,静态内容如图片,html就直接访问文件

Nginx实现动静分离,其实就是在反向队里的时候,如果是静态资源,那么就直接从Nginx发布的路径去读取,而不需要从后台服务器后去了

注意:这种情况下需要保证后端跟前端的程序保持一致,可以Rsync做服务端自动同步或者使用NFS、MFS分布式共享存储

如:

匹配jpg|jpeg|gif|png|swf|ico后缀的文件就直接在root的路径找

负载均衡

Nginx通过upstream模块来实现简单的负载均衡

常用指令

ip_hash

语法:ip_hash

默认值:none

使用字段:upstream

这个指令将基于客户端连接的IP地址来分发请求。

哈希的关键字是客户端的C类网络地址,这个功能将保证这个客户端请求总是被转发到一台服务器上,但是如果这台服务器不可用,那么请求将转发到另外的服务器上,这将保证某个客户端有很大概率总是连接到一台服务器。

无法将权重(weight)与ip_hash联合使用来分发连接。如果有某台服务器不可用,你必须标记其为“down”,如下例:

注意:即使是由同一台机子发出的请求也不一定访问到同一个服务器,可能这台机子也使用了代理,使ip发生变化,或者访问的服务器down掉了

server

语法:server name [parameters]

默认值:none

使用字段:upstream

指定后端服务器的名称和一些参数,可以使用域名,IP,端口,或者unix socket。如果指定为域名,则首先将其解析为IP。

weight = NUMBER - 设置服务器权重,默认为1。

max_fails = NUMBER - 在一定时间内(这个时间在fail_timeout参数中设置)检查这个服务器是否可用时产生的最多失败请求数,默认为1,将其设置为0可以关闭检查,这些错误在proxy_next_upstream或fastcgi_next_upstream(404错误不会使max_fails增加)中定义。

fail_timeout = TIME - 在这个时间内产生了max_fails所设置大小的失败尝试连接请求后这个服务器可能不可用,同样它指定了服务器不可用的时间(在下一次尝试连接请求发起之前),默认为10秒,fail_timeout与前端响应时间没有直接关系,不过可以使用proxy_connect_timeout和proxy_read_timeout来控制。

down - 标记服务器处于离线状态,通常和ip_hash一起使用。

backup - (0.6.7或更高)如果所有的非备份服务器都宕机或繁忙,则使用本服务器(无法和ip_hash指令搭配使用)。

示例配置

注意:如果你只使用一台上游服务器,nginx将设置一个内置变量为1,即max_fails和fail_timeout参数不会被处理。

结果:如果nginx不能连接到上游,请求将丢失。

解决:使用多台上游服务器。

upstream

语法:upstream name { … }

默认值:none

使用字段:http

这个字段设置一群服务器,可以将这个字段放在proxy_pass和fastcgi_pass指令中作为一个单独的实体,它们可以可以是监听不同端口的服务器,并且也可以是同时监听TCP和Unix socket的服务器。

服务器可以指定不同的权重,默认为1。

示例配置

请求将按照轮询的方式分发到后端服务器,但同时也会考虑权重。

在上面的例子中如果每次发生7个请求,5个请求将被发送到backend1.example.com,其他两台将分别得到一个请求,如果有一台服务器不可用,那么请求将被转发到下一台服务器,直到所有的服务器检查都通过。如果所有的服务器都无法通过检查,那么将返回给客户端最后一台工作的服务器产生的结果。

Geo和GeoIP模块

这两个模块主要用于做全局的负载均衡,可以根据不同的客户端来访问不同的服务器,示例如下

由“IT大咖说(ID:itdakashuo)”原创的文章,转载时请注明作者、出处及微信公众号。

本文分享自微信公众号 - IT大咖说(itdakashuo),作者:程序员界的彭于晏

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • nginx使用学习之正向代理、反向代理、负载均衡(配置实例详解)

    Nginx 不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中...

    IT大咖说
  • 物理 CPU vs 逻辑 CPU vs 核心 vs 线程 vs Socket

    当我们试着通过 Linux 命令 nproc 和 lscpu 了解一台计算机 CPU 级的架构和性能时,我们总会发现无法正确地理解相应的结果,因为我们会被好几个...

    IT大咖说
  • 关于分布式锁原理的一些学习与思考-redis分布式锁,zookeeper分布式锁

    在一个进程中,也就是一个jvm或者说应用中,我们很容易去处理控制,在jdkjava.util并发包中已经为我们提供了这些方法去加锁,比如synchronized...

    IT大咖说
  • DevOps工具介绍连载(14)——裸金属服务器

    裸金属服务器,让传统物理机具有了自动发放、自动运维、VPC互联、支撑对接共享存储等云的能力。可以像虚拟机一样灵活的发放和使用,同时又具备了优秀的计算、存储、网络...

    小老鼠
  • 高性能网站架构方案

    主从复制功能通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间SELECT查询可以发送到从服务器,以降低主服务器的查询处理负荷。修改...

    wangxl
  • 高性能网站架构方案

    如何优化网站响应时间? 减少HTTP请求 将多个图片合并成一个文件,减少图片下载请求 合并Javascript脚本和Css文件 利用浏览器的Cache功能,避...

    wangxl
  • 腾讯云:买云服务器注意的事项

    最近看到身边很多朋友都在讨论云服务器,价格,性能配置,当然6月腾讯云优惠活动推出一款优惠云服务器只要99元,这款机型火爆了。但是这个配置个人觉得只适合做静态网站...

    用户5907252
  • 奔溃、卡顿、死机……互联网企业还需打造这一环

    互联网企业总是会反复经历业务极限场景,非常考验服务器的承压能力。爆点事件造成访问崩溃的事件早已屡见不鲜。

    刘旷
  • Redis系列——6.复制功能

    言归正传,今天要说的可是个大家伙,毕竟从现在开始,咱不整简单功能啦,整点厉害的,哈哈哈

    陈琛
  • 服务器配置选择?

    在如今大数据流量剧增的网络应用时代,服务器租用越来越成为众多企业和运营商的首选。而性能和配置不达标的服务器选择只会给企业带来诸多运营问题;但不经过实际需求的评估...

    咻一咻

扫码关注云+社区

领取腾讯云代金券