配置例子
upstream backend { server backend1.example.com weight=5; server backend2.example.com:8080; server unix:/tmp/backend3; server backup1.example.com:8080 backup; server backup2.example.com:8080 backup; } server { location / { proxy_pass http://backend; } }
指令
语法: | upstream name { ... } |
默认值: | — |
上下文: | 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; }
默认情况下,nginx按加权轮转的方式将请求分发到各服务器。 在上面的例子中,每7个请求会通过以下方式分发: 5个请求分到backend1.example.com, 一个请求分到第二个服务器,一个请求分到第三个服务器。 与服务器通信的时候,如果出现错误,请求会被传给下一个服务器,直到所有可用的服务器都被尝试过。 如果所有服务器都返回失败,客户端将会得到最后通信的那个服务器的(失败)响应结果。
语法: | server address [parameters]; |
默认值: | — |
上下文: | upstream |
定义服务器的地址address和其他参数parameters。 地址可以是域名或者IP地址,端口是可选的,或者是指定“unix:”前缀的UNIX域套接字的路径。如果没有指定端口,就使用80端口。 如果一个域名解析到多个IP,本质上是定义了多个server。
你可以定义下面的参数:weight=number设定服务器的权重,默认是1。max_fails=number设定Nginx与服务器通信的尝试失败的次数。在fail_timeout参数定义的时间段内,如果失败的次数达到此值,Nginx就认为服务器不可用。在下一个fail_timeout时间段,服务器不会再被尝试。 失败的尝试次数默认是1。设为0就会停止统计尝试次数,认为服务器是一直可用的。 你可以通过指令proxy_next_upstream、 fastcgi_next_upstream和memcached_next_upstream来配置什么是失败的尝试。 默认配置时,http_404状态不被认为是失败的尝试。fail_timeout=time设定
默认情况下,该超时时间是10秒。backup标记为备用服务器。当主服务器不可用以后,请求会被传给这些服务器。down标记服务器永久不可用,可以跟ip_hash指令一起使用。
Example:
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:8080 backup; }
语法: | ip_hash; |
默认值: | — |
上下文: | upstream |
指定服务器组的负载均衡方法,请求基于客户端的IP地址在服务器间进行分发。 IPv4地址的前三个字节或者IPv6的整个地址,会被用来作为一个散列key。 这种方法可以确保从同一个客户端过来的请求,会被传给同一台服务器。除了当服务器被认为不可用的时候,这些客户端的请求会被传给其他服务器,而且很有可能也是同一台服务器。
从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 connections; |
默认值: | — |
上下文: | upstream |
这个指令出现在版本 1.1.4.
激活对上游服务器的连接进行缓存。
connections参数设置每个worker进程与后端服务器保持连接的最大数量。这些保持的连接会被放入缓存。 如果连接数大于这个值时,最久未使用的连接会被关闭。
需要注意的是,keepalive指令不会限制Nginx进程与上游服务器的连接总数。 新的连接总会按需被创建。 connections参数应该稍微设低一点,以便上游服务器也能处理额外新进来的连接。
配置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 ""; ... } }
另外一种选择是,HTTP/1.0协议的持久连接也可以通过发送“Connection: Keep-Alive”头来实现。不过不建议这样用。
对于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连接的打算。
语法: | least_conn; |
默认值: | — |
上下文: | upstream |
这个指令出现在版本 1.3.1 和 1.2.2.
指定服务器组的负载均衡方法,根据其权重值,将请求发送到活跃连接数最少的那台服务器。 如果这样的服务器有多台,那就采取有权重的轮转法进行尝试。
嵌入的变量
ngx_http_upstream_module模块支持以下嵌入变量:
$upstream_addr保存服务器的IP地址和端口或者是UNIX域套接字的路径。 在请求处理过程中,如果有多台服务器被尝试了,它们的地址会被拼接起来,以逗号隔开,比如: “192.168.1.1:80, 192.168.1.2:80, unix:/tmp/sock”。 如果在服务器之间通过“X-Accel-Redirect”头或者error_page有内部跳转,那么这些服务器组之间会以冒号隔开,比如:“192.168.1.1:80, 192.168.1.2:80, unix:/tmp/sock : 192.168.10.1:80, 192.168.10.2:80”。$upstream_response_time以毫秒的精度保留服务器的响应时间,(输出)单位是秒。 出现多个响应时,也是以逗号和冒号隔开。$upstream_status保存服务器的响应代码。 出现多个响应时,也是以逗号和冒号隔开。$upstream_http_...保存服务器的响应头的值。比如“Server”响应头的值可以通过$upstream_http_server变量来获取。 需要注意的是只有最后一个响应的头会被保留下来。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍详解spring 配置的两种方式:JAVA配置和注解配置,包括了详解spring 配置的两种方式:JAVA配置和注解配置的使用技巧和注意事项,需要的朋友参考一下 众所周知,spring自从3.0开始以后,就全面推荐使用配置的方式进行代码编写了,这种方式确实可以避免了之前一个项目里面一大堆XML的情况,毕竟XML的可读性实在不怎么样,而且一会写JAVA,一会写XML,确实还是蛮麻烦的
本文向大家介绍tsconfig.json配置详解,包括了tsconfig.json配置详解的使用技巧和注意事项,需要的朋友参考一下 概述 如果一个目录下存在一个tsconfig.json文件,那么它意味着这个目录是TypeScript项目的根目录。 tsconfig.json文件中指定了用来编译这个项目的根文件和编译选项。 一个项目可以通过以下方式之一来编译: 使用tsconfig.json 不带
前面我们一起学习了 Groovy 语言的语法基础,再由浅入深从 Gradle 的环境变量配置,到创建一个简单的 Gradle 项目。今天这节课我们为大家介绍一下 Android 项目中 Gradle 的配置。 1. AndroidStudio 项目结构 我们介绍 AndroidStudio 中 Android 项目的 Gradle 配置之前,我们先来看下 AndroidStudio 中 Andro
本文向大家介绍Spring Boot Hazelcast Caching 使用和配置详解,包括了Spring Boot Hazelcast Caching 使用和配置详解的使用技巧和注意事项,需要的朋友参考一下 本文将展示spring boot 结合 Hazelcast 的缓存使用案例。 1. Project Structure 2. Maven Dependencies 3. Hazelcast
本文向大家介绍详解log4j.properties的简单配置和使用,包括了详解log4j.properties的简单配置和使用的使用技巧和注意事项,需要的朋友参考一下 本文介绍了详解log4j.properties的简单配置和使用,分享给大家,具体如下: 简单log4j.properties配置示例 JAVA 代码部分 需要log4j JAR包 Log4j支持两种格式的配置文件:xml和prope
本文向大家介绍详解spring Boot Cli的配置和使用,包括了详解spring Boot Cli的配置和使用的使用技巧和注意事项,需要的朋友参考一下 SpringBootCLI是一个命令行工具,可用于快速搭建基于spring的原型。它支持运行Groovy脚本,这也就意味着你可以使用类似Java的语法,但不用写很多的模板代码。 Spring Boot不一定非要配合CLI使用,但它绝对是Spri