Nginx高级指南

模块

Nginx的模块扩展了Nginx的能力,其模块分为3种:

  • Nginx开发的模块
  • 经由Nginx认证的社区开发模块
  • 社区开发的模块

安装模块

通过系统的包管理器或者按照安装指南安装即可。

启用模块

nginx.conf 配置文件的main上下文中,使用 load_module modules/<模块名>.so; 加载指令即可。

配置

测试配置文件

nginx -t

特定功能的配置文件

为了使得配置易于维护,可以将特定功能的配置文件存放于 /etc/nginx/conf.d 目录,然后在nginx.conf 中用指令include 来引用这些配置的内容。

上下文

顶级指令(上下文)将不同类型的指令组合在一起:

  • events:通用连接处理
  • http: HTTP流量
  • mail: 邮件流量
  • stream: TCP和UDP流量

虚拟服务器

在每一个流量处理的上下文中,你可以包含一个或多个server块来定义虚拟服务器,来控制处理请求。server中可以包含的指令因你的流量类型而有所不同。

对于http流量,每个server指令控制特定域名或IP的资源请求的处理,server上下文可包含一个或多个location来定义如何处理指定的URI集。

对于mail和tcp/udp流量(邮件和流上下文),服务器指令分别控制到达特定TCP端口或UNIX套接字的流量的处理。

继承

子上下文继承父上下文中包含的指令设置,可以通过将指令包含在子上下文中重写从父上下文继承的设置。

负载均衡

将HTTP流量代理到一组服务

首先用指令 upstream 定义组,该指令位于http上下文内。

组中的服务器用指令 server 定义。

要将请求传递给服务器组,为这些协议指定 proxy_passfastcgi_passmemcached_passscgi_passuwsgi_pass指令。

upstream 块没有指定负载均衡算法,所以Nginx使用默认算法循环调度。

选择负载均衡算法

Nginx支持4种负载均衡算法,Nginx Plus增添了2种。

1.Round Robin(循环):请求在服务器之间均匀分布,可指定服务器权重。该算法默认在未指定任何负载均衡算法时,默认启用。

2.Least Connections(最少连接):向活动连接数最少的服务器发起请求,使用least_conn指令,同样考虑服务器权重。

3.IP Hash(IP哈希):请求发送到哪个服务器是根据客户端的IP地址确定的,使用ip_hash指令,在这种情况下,要么使用IPV4的前3个8位字节,要么使用整个IPV6地址来计算哈希值。这个负载均衡算法确保来自同一地址的请求到达同一服务器,除非该服务器不可用。

如果其中一台服务器要暂时从负载均衡的循环中删除,它可以用down参数进行标记,以便保留客户端IP地址的当前哈希。发送给该服务器的请求会自动发送到组中的下一台服务器。

4.Generic Hash(通用哈希):请求发送到哪个服务器由用户定义的键决定,键可以是文本字符串、变量或它们的组合,使用hash指令。例如,键可以是成对的源IP地址和端口,或者是本例中的URI。

可选参数consistent支持ketama 一致哈希负载均衡,基于用户定义的哈希键值,请求均匀分布在所有upsteam服务器上。如果将upsteam服务器添加或从upsteam组删除,则只重新映射几个键,从而在负载平衡缓存服务器或其他累积状态的应用程序的情况下,最大限度地减少缓存未命中。

5.Least Time(最短时间)(Nginx Plus可用):使用least_time指令,对于每个请求,Nginx选择平均延迟最低和活动连接数最少的服务器,其中最低平均延迟是根据last_time指令的下列参数计算的:

  • header:从服务器接收第一个字节的时间
  • last_byte:从服务器接收完整响应的时间
  • last_byte inflight:考虑到不完整到请求,从服务器接收完整响应的时间

6.Random(随机):使用random指令,每个请求会被传递给一个随机选择的服务器。如果指定了2个参数,首先,Nginx考虑到服务器权重,随机选择2台服务器,然后使用指定的方法选择其中一台服务器:

  • least_conn:活动连接的最少数量
  • least_time=header(Nginx Plus):从服务器接收响应报头的最短平均时间 ($upstream_header_time)
  • least_time=last_byte(Nginx Plus): 从服务器接收完整响应的最小平均时间 ($upstream_response_time)

服务器权重

默认情况下,Nginx使用循环方法根据服务器的权重在组中的服务器之间分配请求。server指令的weight参数设置服务器的权重,其值默认为1。

backup服务器不会接收请求,除非另外的服务器都不可用。使用服务器权重,请求按照权重的比例分配给服务器。

服务器慢启动

服务器慢启动可以防止最近恢复的服务器被连接压垮,这可能会超时并导致服务器再次被标记为故障。

在Nginx Plus中,慢启动允许upstream服务器在恢复或可用后将其权重从0逐渐恢复到它的正常值,这可以通过服务器指令的slow_start参数来完成,Nginx将在指定时间后将服务器连接数增加到最大值。

注意,如果一个组中只有一台服务器,服务器指令的max_failsfail_timeoutslow_start参数将被忽略,并且该服务器永远不会被视为不可用。