ngx_http_upstream_module

ngx_http_upstream_module模块用于定义可由proxy_pass,fastcgi_pass,uwsgi_pass,scgi_pass和memcached_pass指令引用的服务器组。

upstream

Syntax: upstream name { ... }
Default: —
Context: http

定义一组服务器。 服务器可以在不同的端口上侦听。 此外,监听TCP和UNIX域套接字的服务器可以混合。
举例:

upstream backend {
server backend1.example.com weight=5;
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3; server backup1.example.com backup;
}

默认情况下,请求在服务器之间使用加权循环平衡方法分发。 在上面的例子中,每个7个请求将被分配如下:5个请求到backend1.example.com,一个请求到每个第二和第三个服务器。 如果在与服务器通信期间发生错误,请求将传递到下一个服务器,依此类推,直到所有正在运行的服务器都将被尝试。 如果无法从任何服务器获得成功的响应,则客户端将接收与最后一个服务器的通信结果。

server

Syntax: server address [parameters];
Default: —
Context: upstream

定义服务器的地址和其他参数。 可以将地址指定为域名或IP地址,具有可选端口或作为在“unix:”前缀后指定的UNIX域套接字路径。 如果未指定端口,则使用端口80。 解析为多个IP地址的域名会一次定义多个服务器。

可以定义以下参数:

weight=number

设置服务器的权重,默认为1。

max_conns=number

限制到代理服务器的同时活动连接的最大数量(1.11.5)。 默认值为零,表示没有限制。 如果服务器组不驻留在共享内存中,则每个工作进程的限制都有效。
如果启用了空闲保持活动连接,多个工作线程和共享内存,则到代理服务器的活动和空闲连接的总数可能会超过max_conns值。
从版本1.5.9和版本1.11.5之前,此参数可作为我们的商业订阅的一部分。

max_fails=number

设置应在fail_timeout参数设置的持续时间内与服务器通信的失败尝试次数,以考虑服务器在fail_timeout参数设置的持续时间内不可用。 默认情况下,失败尝试次数设置为1.零值禁用尝试计数。 被认为不成功的尝试由proxy_next_upstream,fastcgi_next_upstream,uwsgi_next_upstream,scgi_next_upstream和memcached_next_upstream指令定义。

fail_timeout=time

sets:

  • 与服务器通信的指定次数的失败尝试发生在考虑服务器不可用的时间;

  • 以及服务器将被视为不可用的时间段。

默认情况下,参数设置为10秒。

backup

将服务器标记为备份服务器。 当主服务器不可用时,将传递请求。

down

将服务器标记为永久不可用。

zone

Syntax: zone name [size];
Default: —
Context: upstream
This directive appeared in version 1.9.0.

定义共享内存区域的名称和大小,以保持在工作进程之间共享的组的配置和运行时状态。 几个组可以共享相同的区域。 在这种情况下,只需指定一次大小即可。

此外,作为我们商业订阅的一部分,此类组允许更改组成员资格或修改特定服务器的设置,而不需要重新启动nginx。 可以通过由upstream_conf处理的特殊位置访问配置。

state

Syntax: state file;
Default: —
Context: upstream
This directive appeared in version 1.9.7.

指定保持动态可配置组的状态的文件。

例子:

state /var/lib/nginx/state/servers.conf; # path for Linux
state /var/db/nginx/state/servers.conf; # path for FreeBSD

状态当前限于具有其参数的服务器列表。 在解析配置时读取文件,并在每次更改上游配置时更新文件。 应避免直接更改文件内容。 该伪指令不能与服务器伪指令一起使用。

配置重新加载或二进制升级期间所做的更改可能会丢失。
此指令可作为我们商业订阅的一部分。

hash

Syntax: hash key [consistent];
Default: —
Context: upstream
This directive appeared in version 1.7.2.

指定服务器组的负载平衡方法,其中客户端 - 服务器映射基于散列键值。 键可以包含文本,变量及其组合。 请注意,从组中添加或删除服务器可能会导致将大多数密钥重新映射到不同的服务器。 该方法与Cache::Memcached Perl库兼容。

如果指定了一致的参数,将使用ketama一致性哈希方法。 该方法确保在向组中添加或从组中删除服务器时,只有少量密钥将重新映射到不同的服务器。 这有助于实现缓存服务器的更高的缓存命中率。 该方法与具有ketama_points参数设置为160的Cache::Memcached::Fast Perl库兼容。

ip_hash

Syntax: ip_hash;
Default: —
Context: upstream

指定组应使用负载平衡方法,其中请求根据客户端IP地址分布在服务器之间。 客户端IPv4地址的前三个八位字节或整个IPv6地址用作散列密钥。 该方法确保来自同一客户端的请求将始终传递到同一服务器,除非此服务器不可用。 在后一种情况下,客户端请求将被传递到另一个服务器。 最可能的是,它将始终是相同的服务器。

从版本1.3.2和1.2.2开始支持IPv6地址。
如果其中一个服务器需要临时删除,则应使用down参数标记,以保留客户端IP地址的当前散列。

例:

upstream backend {
ip_hash; server backend1.example.com;
server backend2.example.com;
server backend3.example.com down;
server backend4.example.com;
}

在版本1.3.1和1.2.2之前,无法使用ip_hash负载平衡方法为服务器指定权重。

keepalive

Syntax: keepalive connections;
Default: —
Context: upstream
This directive appeared in version 1.1.4.

激活与上游服务器的连接的缓存。

connections参数设置保存在每个工作进程的缓存中的上游服务器的空闲keepalive连接的最大数量。 当超过此数量时,最近使用的最少连接将关闭。

应该特别注意的是,keepalive伪指令不限制nginx工作进程可以打开的到上游服务器的连接的总数。 连接参数应设置为足够小,以允许上游服务器处理新的传入连接。
memcached上游和keepalive连接的示例配置:

upstream memcached_backend {
server 127.0.0.1:11211;
server 10.0.0.2:11211; keepalive 32;
} server {
... location /memcached/ {
set $memcached_key $uri;
memcached_pass memcached_backend;
} }

对于HTTP,proxy_http_version指令应设置为“1.1”,并且“Connection”头字段应该被清除:

upstream http_backend {
server 127.0.0.1:8080; keepalive 16;
} server {
... location /http/ {
proxy_pass http://http_backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
...
}
}

或者,可以通过将“Connection:Keep-Alive”头字段传递到上游服务器来使用HTTP / 1.0持久连接,但不推荐使用此方法。
对于FastCGI服务器,需要将fastcgi_keep_conn设置为keepalive连接工作:

upstream fastcgi_backend {
server 127.0.0.1:9000; keepalive 8;
} server {
... location /fastcgi/ {
fastcgi_pass fastcgi_backend;
fastcgi_keep_conn on;
...
}
}

当使用除默认循环方法之外的负载平衡器方法时,有必要在keepalive伪指令之前激活它们。
SCGI和uwsgi协议没有keepalive连接的概念。

ntlm

Syntax: ntlm;
Default: —
Context: upstream
This directive appeared in version 1.9.2.

允许使用NTLM身份验证代理请求。 一旦客户端发送具有以“Negotiate”或“NTLM”开始的“授权”报头字段值的请求,上游连接就绑定到客户端连接。 进一步的客户端请求将通过相同的上游连接来代理,保持认证上下文。

为了使NTLM身份验证工作,需要启用与上游服务器的keepalive连接。 proxy_http_version指令应设置为“1.1”,并且“连接”头字段应该被清除:

upstream http_backend {
server 127.0.0.1:8080; ntlm;
} server {
... location /http/ {
proxy_pass http://http_backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
...
}
}

使用除默认循环方法之外的负载均衡器方法时,必须在ntlm指令之前激活它们。
此指令可作为我们商业订阅的一部分。

least_conn

Syntax: least_conn;
Default: —
Context: upstream
This directive appeared in versions 1.3.1 and 1.2.2.

指定组应使用负载平衡方法,其中将请求传递到具有最少活动连接数的服务器,同时考虑服务器的权重。 如果有几个这样的服务器,则使用加权循环平衡方法依次尝试它们。

least_time

Syntax: least_time header | last_byte;
Default: —
Context: upstream
This directive appeared in version 1.7.10.

指定组应使用负载平衡方法,其中将请求传递到具有最短平均响应时间和最少活动连接数的服务器,同时考虑服务器的权重。 如果有几个这样的服务器,则使用加权循环平衡方法依次尝试它们。

如果指定了header参数,则使用接收响应头的时间。 如果指定了last_byte参数,则使用接收完整响应的时间。

此指令可作为我们商业订阅的一部分。

health_check

Syntax: health_check [parameters];
Default: —
Context: location

启用周围位置中引用的组中的服务器的定期运行状况检查。
此指令可作为我们商业订阅的一部分。

match

Syntax: match name { ... }
Default: —
Context: http

定义用于验证对健康检查请求的响应的命名测试集。
此指令可作为我们商业订阅的一部分。

queue

Syntax: queue number [timeout=time];
Default: —
Context: upstream
This directive appeared in version 1.5.12.

如果在处理请求时不能立即选择上游服务器,则请求将被放入队列。 该伪指令同时指定队列中可以有的最大请求数。 如果队列已满,或者服务器将请求传递到无法在超时参数中指定的时间段内选择,则502(错误网关)错误将返回到客户端。

超时参数的默认值为60秒。

此指令可作为我们商业订阅的一部分。

sticky

Syntax: sticky cookie name [expires=time] [domain=domain] [httponly] [secure] [path=path];
sticky route $variable ...;
sticky learn create=$variable lookup=$variable zone=name:size [timeout=time];
Default: —
Context: upstream
This directive appeared in version 1.5.7.

启用会话关联,这会使来自同一客户端的请求传递到一组服务器中的同一服务器。
此指令可作为我们商业订阅的一部分。

ngx_http_upstream_conf_module

ngx_http_upstream_conf_module模块允许通过简单的HTTP接口即时配置上游服务器组,而无需重新启动nginx。 http或流服务器组必须驻留在共享内存中。
此模块可作为我们商业订阅的一部分。
详细参考

ngx_http_upstream_module模块.md的更多相关文章

  1. 20、nginx之ngx_http_upstream_module模块

    nginx的ngx_http_upstream_module模块是用于nginx反向代理的,默认在安装nginx时已经被安装,ngx_http_upstream_module模块 的内容应放于 ngi ...

  2. ngx_http_upstream_module模块学习笔记

    ngx_http_upstream_module用于将多个服务器定义成服务器组,而由proxy_pass,fastcgi_pass等指令引用 (1)upstream name  {...} 定义一个后 ...

  3. ngx_http_uwsgi_module模块.md

    ngx_http_uwsgi_module ngx_http_uwsgi_module模块允许将请求传递到uwsgi服务器. 示例配置: location / { include uwsgi_para ...

  4. ngx_http_proxy_module模块.md

    ngx_http_proxy_module ngx_http_proxy_module模块允许将请求传递到另一个服务器. proxy_bind Syntax: proxy_bind address [ ...

  5. ngx_http_fastcgi_module模块.md

    ngx_http_fastcgi_module ngx_http_fastcgi_module模块允许将请求传递到FastCGI服务器. fastcgi_bind Syntax: fastcgi_bi ...

  6. ngx_http_core_module模块.md

    Directives aio Syntax: aio on | off | threads[=pool]; Default: aio off; Context: http, server, locat ...

  7. Nginx中ngx_http_upstream_module模块

    用于将多个服务器器定义成服务器器组,⽽而由 proxy_pass , fastcgi_pass 等指令进⾏行行引⽤用upstream backend {server backend1.example. ...

  8. nginx添加 nginx_heath模块

    原因?为什么会使用nginx_heath 这个模块,主要是如nginx+tomcat部署的时,tomcat挂了之后nginx->upstream 轮询是可以踢掉挂掉的tomcat服务的,如果部署 ...

  9. nginx常用模块

    Nginx模块介绍 核心模块:core module 标准模块:stand modules HTTP modules: Standard HTTP modules Optional HTTP modu ...

随机推荐

  1. TortoiseGIT创建及合并分支

    一.创建分支 项目右键 => TortoiseGit(T) => 创建分支,然后右键切换到刚刚创建的分支,新增/修改一个文件,提交分支到远端服务器,推送成功之后分支就创建好了. 二.合并分 ...

  2. SQL Tuning 基础概述06 - 表的关联方式:Nested Loops Join,Merge Sort Join & Hash Join

    nested loops join(嵌套循环)   驱动表返回几条结果集,被驱动表访问多少次,有驱动顺序,无须排序,无任何限制. 驱动表限制条件有索引,被驱动表连接条件有索引. hints:use_n ...

  3. Android来电监听和去电监听

    我觉得写文章就得写得有用一些的,必须要有自己的思想,关于来电去电监听将按照下面三个问题展开 1.监听来电去电有什么用? 2.怎么监听,来电去电监听方式一样吗? 3.实战,有什么需要特别注意地方? 监听 ...

  4. MyCat源码分析系列之——BufferPool与缓存机制

    更多MyCat源码分析,请戳MyCat源码分析系列 BufferPool MyCat的缓冲区采用的是java.nio.ByteBuffer,由BufferPool类统一管理,相关的设置在SystemC ...

  5. is not in the sudoers file的解决方法

    遇到这个问题 修改sudoers 文件   /etc/sudoers 添加

  6. jvm内存区域

    概述 jvm内存分为几个区域: 程序计数器 虚拟机栈 本地方法栈 堆 方法区 运行时常量池 直接内存 这些内存区域是在java进程中细分的,为java程序提供服务 不同的区域存储的内容不一样,生命周期 ...

  7. 性能卓越的js模板引擎--artTemplate

    artTemplate能够将数据与View视图的分离,充分利用 javascript 引擎特性,使得其性能无论在前端还是后端都有极其出色的表现. 在 chrome 下渲染效率测试中分别是知名引擎 Mu ...

  8. H5——表单验证新特性,注册模态框!

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  9. Scala override

    var 变量不能在子类中重写,除非父类是抽象类 在抽象类中var变量不能赋初值 abstract class Person{ val name="" def name1=" ...

  10. 了解npm的文件结构(npm-folders)和配置文件(npm-mrc)

    一.npm的文件结构 npm的安装: 本地安装 1. 将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm ...