Nginx 配置详解
nginx 概述
nginx 是一款自由的, 开源的, 高性能的 HTTP 服务器和反向代理服务器; 同时也是一个 IMAP,POP3,SMTP 代理服务器; nginx 可以作为一个 HTTP 服务器进行网站的发布处理, 另外 nginx 可以作为反向代理进行负载均衡的实现.
这里主要通过三个方面简单介绍 nginx
反向代理
负载均衡
nginx 特点
1. 反向代理
关于代理
说到代理, 首先我们要明确一个概念, 所谓代理就是一个代表, 一个渠道;
此时就设计到两个角色, 一个是被代理角色, 一个是目标角色, 被代理角色通过这个代理访问目标角色完成一些任务的过程称为代理操作过程; 如同生活中的专卖店~ 客人到 adidas 专卖店买了一双鞋, 这个专卖店就是代理, 被代理角色就是 adidas 厂家, 目标角色就是用户
正向代理
说反向代理之前, 我们先看看正向代理, 正向代理也是大家最常接触的到的代理模式, 我们会从两个方面来说关于正向代理的处理模式, 分别从软件方面和生活方面来解释一下什么叫正向代理
在如今的网络环境下, 我们如果由于技术需要要去访问国外的某些网站, 此时你会发现位于国外的某网站我们通过浏览器是没有办法访问的, 此时大家可能都会用一个操作 FQ 进行访问, FQ 的方式主要是找到一个可以访问国外网站的代理服务器, 我们将请求发送给代理服务器, 代理服务器去访问国外的网站, 然后将访问到的数据传递给我们!
上述这样的代理模式称为正向代理, 正向代理最大的特点是客户端非常明确要访问的服务器地址; 服务器只清楚请求来自哪个代理服务器, 而不清楚来自哪个具体的客户端; 正向代理模式屏蔽或者隐藏了真实客户端信息.
反向代理
明白了什么是正向代理, 我们继续看关于反向代理的处理方式, 举例如我大天朝的某宝网站, 每天同时连接到网站的访问人数已经爆表, 单个服务器远远不能满足人民日益增长的购买欲望了, 此时就出现了一个大家耳熟能详的名词: 分布式部署; 也就是通过部署多台服务器来解决访问人数限制的问题; 某宝网站中大部分功能也是直接使用 nginx 进行反向代理实现的, 并且通过封装 nginx 和其他的组件之后起了个高大上的名字: Tengine, 有兴趣的童鞋可以访问 Tengine 的官网查看具体的信息: http://tengine.taobao.org/
那么反向代理具体是通过什么样的方式实现的分布式的集群操作呢, 我们先看一个示意图:
通过上述的图解大家就可以看清楚了, 多个客户端给服务器发送的请求, nginx 服务器接收到之后, 按照一定的规则分发给了后端的业务处理服务器进行处理了. 此时~ 请求的来源也就是客户端是明确的, 但是请求具体由哪台服务器处理的并不明确了, nginx 扮演的就是一个反向代理角色
反向代理, 主要用于服务器集群分布式部署的情况下, 反向代理隐藏了服务器的信息!
项目场景
通常情况下, 我们在实际项目操作时, 正向代理和反向代理很有可能会存在在一个应用场景中, 正向代理代理客户端的请求去访问目标服务器, 目标服务器是一个反向单利服务器, 反向代理了多台真实的业务处理服务器. 具体的拓扑图如下:
2. 负载均衡
我们已经明确了所谓代理服务器的概念, 那么接下来, nginx 扮演了反向代理服务器的角色, 它是以依据什么样的规则进行请求分发的呢? 不用的项目应用场景, 分发的规则是否可以控制呢?
这里提到的客户端发送的, nginx 反向代理服务器接收到的请求数量, 就是我们说的负载量
请求数量按照一定的规则进行分发到不同的服务器处理的规则, 就是一种均衡规则
所以~ 将服务器接收到的请求按照规则分发的过程, 称为负载均衡.
负载均衡在实际项目操作过程中, 有硬件负载均衡和软件负载均衡两种, 硬件负载均衡也称为硬负载, 如 F5 负载均衡, 相对造价昂贵成本较高, 但是数据的稳定性安全性等等有非常好的保障, 如中国移动中国联通这样的公司才会选择硬负载进行操作; 更多的公司考虑到成本原因, 会选择使用软件负载均衡, 软件负载均衡是利用现有的技术结合主机硬件实现的一种消息队列分发机制
nginx 支持的负载均衡调度算法方式如下:
weight 轮询(默认): 接收到的请求按照顺序逐一分配到不同的后端服务器, 即使在使用过程中, 某一台后端服务器宕机, nginx 会自动将该服务器剔除出队列, 请求受理情况不会受到任何影响. 这种方式下, 可以给不同的后端服务器设置一个权重值(weight), 用于调整不同的服务器上请求的分配率; 权重数据越大, 被分配到请求的几率越大; 该权重值, 主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的.
ip_hash: 每个请求按照发起客户端的 ip 的 hash 结果进行匹配, 这样的算法下一个固定 ip 地址的客户端总会访问到同一个后端服务器, 这也在一定程度上解决了集群部署环境下 session 共享的问题.
fair: 智能调整调度算法, 动态的根据后端服务器的请求处理到响应的时间进行均衡分配, 响应时间短处理效率高的服务器分配到请求的概率高, 响应时间长处理效率低的服务器分配到的请求少; 结合了前两者的优点的一种调度算法. 但是需要注意的是 nginx 默认不支持 fair 算法, 如果要使用这种调度算法, 请安装 upstream_fair 模块
url_hash: 按照访问的 url 的 hash 结果分配请求, 每个请求的 url 会指向后端固定的某个服务器, 可以在 nginx 作为静态服务器的情况下提高缓存效率. 同样要注意 nginx 默认不支持这种调度算法, 要使用的话需要安装 nginx 的 hash 软件包
Nginx 安装
1. Windows 安装
官方网站下载地址:
https://nginx.org/en/download.html
如下图所示, 下载对应的版本的 nginx 压缩包, 解压到自己电脑上存放软件的文件夹中即可
解压完成后, 文件目录结构如下:
启动 nginx
1) 直接双击该目录下的 nginx.exe, 即可启动 nginx 服务器
2) 命令行计入该文件夹, 执行 nginx 命令, 也会直接启动 nginx 服务器
D:/resp_application/nginx-1.13.5> nginx
访问 nginx
打开浏览器, 输入地址: http://localhost, 访问页面, 出现如下页面表示访问成功
停止 nginx
命令行进入 nginx 根目录, 执行如下命令, 停止服务器:
- # 强制停止 nginx 服务器, 如果有未处理的数据, 丢弃
- D:/resp_application/nginx-1.13.5> nginx -s stop
- # 优雅的停止 nginx 服务器, 如果有未处理的数据, 等待处理完成之后停止
- D:/resp_application/nginx-1.13.5> nginx -s quit
2. Ubuntu 安装
按照正常软件的安装方式, 直接通过如下命令进行安装:
$ sudo apt-get install nginx
安装完成即可, 在 / usr/sbin / 目录下是 nginx 命令所在目录, 在 / etc/nginx / 目录下是 nginx 所有的配置文件, 用于配置 nginx 服务器以及负载均衡等信息
查看 nginx 进程是否启动
$ ps -ef|grep nginx
nginx 会自动根据当前主机的 CPU 的内核数目创建对应的进程数量(当前 Ubuntu 主机是 2 核 4 线程配置)
备注: 这里启动的服务进程其实是 4 个进程, 因为 nginx 进程在启动的时候, 会附带一个守护进程, 用于保护正式进程不被异常终止; 如果守护进程一旦返现 nginx 继承被终止了, 会自动重启该进程.
守护进程一般会称为 master 进程, 业务进程被称为 worker 进程
启动 nginx 服务器命令
直接执行 nginx 会按照默认的配置文件进行服务器的启动
$ nginx
停止 nginx 服务命令
和 Windows 系统执行过程一样, 两种停止方式
- $ nginx -s stop
- or
- $ nginx -s quit
重新启动加载
同样也可以使用命令 reopen 和 reload 来重新启动 nginx 或者重新加载配合着文件.
3. Mac os 安装
直接通过 brew 进行 nginx 的安装, 或者下载 tar.gz 压缩包都是可以的.
直接通过 brew 进行安装
brew install nginx
安装完成后, 后续的命令操作, 服务器的启动, 进程查看, 服务器的停止, 服务器的重启已经文件加载命令都是一致的.
nginx 配置
nginx 是一个功能非常强大的 web 服务器加反向代理服务器, 同时又是邮件服务器等等
在项目使用中, 使用最多的三个核心功能是反向代理, 负载均衡和静态服务器
这三个不同的功能的使用, 都跟 nginx 的配置密切相关, nginx 服务器的配置信息主要集中在 nginx.conf 这个配置文件中, 并且所有的可配置选项大致分为以下几个部分
- main # 全局配置
- events {
- # nginx 工作模式配置
- }
- http {
- # http 设置
- ....
- server {
- # 服务器主机配置
- ....
- location {
- # 路由配置
- ....
- }
- location path {
- ....
- }
- location otherpath {
- ....
- }
- }
- server {
- ....
- location {
- ....
- }
- }
- upstream name {
- # 负载均衡配置
- ....
- }
- }
如上述配置文件所示, 主要由 6 个部分组成:
main: 用于进行 nginx 全局信息的配置
events: 用于 nginx 工作模式的配置
http: 用于进行 http 协议信息的一些配置
server: 用于进行服务器访问信息的配置
location: 用于进行访问路由的配置
upstream: 用于进行负载均衡的配置
main 模块
观察下面的配置代码
- # user nobody nobody;
- worker_processes 2;
- # error_log logs/error.log
- # error_log logs/error.log notice
- # error_log logs/error.log info
- # pid logs/nginx.pid
- worker_rlimit_nofile 1024;
上述配置都是存放在 main 全局配置模块中的配置项
user 用来指定 nginx worker 进程运行用户以及用户组, 默认 nobody 账号运行
worker_processes 指定 nginx 要开启的子进程数量, 运行过程中监控每个进程消耗内存 (一般几 M~ 几十 M 不等) 根据实际情况进行调整, 通常数量是 CPU 内核数量的整数倍
error_log 定义错误日志文件的位置及输出级别[debug / info / notice / warn / error / crit]
pid 用来指定进程 id 的存储文件的位置
worker_rlimit_nofile 用于指定一个进程可以打开最多文件数量的描述, 最大文件打开数(连接), 可设置为系统优化后的 ulimit -HSn 的结果
event 模块
上干货
- event {
- accept_mutex on; #设置网路连接序列化, 防止惊群现象发生, 默认为 on
- worker_connections 1024;
- multi_accept on;
- use epoll;
- }
上述配置是针对 nginx 服务器的工作模式的一些操作配置
worker_connections 指定最大可以同时接收的连接数量, 这里一定要注意, 最大连接数量是和 worker processes 共同决定的.
multi_accept 配置指定 nginx 在收到一个新连接通知后尽可能多的接受更多的连接
use epoll 配置指定了线程轮询的方法, 如果是 linux2.6+, 使用 epoll, 如果是 BSD 如 Mac 请使用 Kqueue
http 模块
作为 Web 服务器, http 模块是 nginx 最核心的一个模块, 配置项也是比较多的, 项目中会设置到很多的实际业务场景, 需要根据硬件信息进行适当的配置, 常规情况下, 使用默认配置即可!
- http {
- ##
- # 基础配置
- ##
- sendfile on;
- tcp_nopush on;
- tcp_nodelay on;
- keepalive_timeout 65;
- types_hash_max_size 2048;
- # server_tokens off;
- # server_names_hash_bucket_size 64;
- # server_name_in_redirect off;
- include /etc/nginx/mime.types;
- default_type application/octet-stream;
- #设定请求缓存
- server_names_hash_bucket_size 256;
- #保存服务器名字的 hash 表是由指令 server_names_hash_max_size 和 server_names_hash_bucket_size 所控制的. 参数 hash bucket size 总是
- #等于 hash 表的大小, 并且是一路处理器缓存大小的倍数. 在减少了在内存中的存取次数后, 使在处理器中加速查找 hash 表键值成为可能. 如果
- #hash bucket size 等于一路处理器缓存的大小, 那么在查找键的时候, 最坏的情况下在内存中查找的次数为 2. 第一次是确定存储单元的地址,
- #第二次是在存储单元中查找键 值. 因此, 如果 Nginx 给出需要增大 hash max size 或 hash bucket size 的提示, 那么首要的是增大前一个参数的大小.
- client_header_buffer_size 256k;
- # 设定请求缓冲
- large_client_header_buffers 4 256k
- # 设定请求缓冲;
- client_max_body_size 500m;
- #== 允许客户端请求的最大单文件字节数
- client_body_buffer_size 256k;
- #== 冲区代理缓冲用户端请求的最大字节数
- client_header_timeout 3m;
- #用于设置客户端请求读取超时时间, 如果超过这个时间, 客户端没有发送任何数据, nginx 将返回 "request time out (408)" 错误.
- client_body_timeout 3m;
- #用于设置客户端请求主体读取超时时间, 默认值为 60. 如果超过这个时间, 客户端还没有发送任何数据, nginx 将返回 "Request time out(408)"
- send_timeout 3m;
- #服务器超时设置
- large_client_header_buffers 4 512k;
- client_max_body_size 100m;
- '
- # 设定日志格式一般来说: nginx 的 log_format 有很多可选的参数用于指示服务器的活动状态, 默认的是:
- log_format main '$remote_addr - $remote_user [$time_local]"$request"'$status $body_bytes_sent"$http_referer"''"$http_user_agent""$http_x_forwarded_for"';;
- #隐藏响应 header 和错误通知中的版本号
- server_tokens off;
- ##
- # SSL 证书配置
- ##
- ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
- ssl_prefer_server_ciphers on;
- ##
- # 日志配置
- ##
- access_log /var/log/nginx/access.log;
- error_log /var/log/nginx/error.log;
- ##
- # Gzip 压缩配置
- ##
- gzip on;
- gzip_disable "msie6";
- # gzip_vary on;
- # gzip_proxied any;
- # gzip_comp_level 6;
- # gzip_buffers 16 8k;
- # gzip_http_version 1.1;
- # gzip_types text/plain text/CSS application/JSON application/JavaScript
- text/xml application/xml application/xml+rss text/JavaScript;
- ##
- # 虚拟主机配置
- ##
- include /etc/nginx/conf.d/*.conf;
- include /etc/nginx/sites-enabled/*;
1) 基础配置
sendfile on: 配置 on 让 sendfile 发挥作用, 将文件的回写过程交给数据缓冲去去完成, 而不是放在应用中完成, 这样的话在性能提升有有好处
tcp_nopush on: 让 nginx 在一个数据包中发送所有的头文件, 而不是一个一个单独发
tcp_nodelay on: 让 nginx 不要缓存数据, 而是一段一段发送, 如果数据的传输有实时性的要求的话可以配置它, 发送完一小段数据就立刻能得到返回值, 但是不要滥用哦
keepalive_timeout 10: 给客户端分配连接超时时间, 服务器会在这个时间过后关闭连接. 一般设置时间较短, 可以让 nginx 工作持续性更好
client_header_timeout 10: 设置请求头的超时时间
client_body_timeout 10: 设置请求体的超时时间
send_timeout 10: 指定客户端响应超时时间, 如果客户端两次操作间隔超过这个时间, 服务器就会关闭这个链接
limit_conn_zone $binary_remote_addr zone=addr:5m : 设置用于保存各种 key 的共享内存的参数,
limit_conn addr 100: 给定的 key 设置最大连接数
server_tokens: 虽然不会让 nginx 执行速度更快, 但是可以在错误页面关闭 nginx 版本提示, 对于网站安全性的提升有好处哦
include /etc/nginx/mime.types: 指定在当前文件中包含另一个文件的指令
default_type application/octet-stream: 指定默认处理的文件类型可以是二进制
type_hash_max_size 2048: 混淆数据, 影响三列冲突率, 值越大消耗内存越多, 散列 key 冲突率会降低, 检索速度更快; 值越小 key, 占用内存较少, 冲突率越高, 检索速度变慢
日志格式详解:
在日志格式样式中, 变量 $remote_addr 和 $http_x_forwarded_for 用于记录 IP 地址;
$remote_user 用于记录远程客户端用户名称;
$time_local 用于记录访问时间与时区;
$request 用于记录请求 URL 与 HTTP 协议;
$status 用于记录请求状态, 例如成功时状态为 200, 页面找不到时状态为 404;
$body_bytes_sent 用于记录发送客户端的文件主体内容大小;
$http_referer 用于记录是从哪个页面链接访问过来的;
$http_user_agent 用于记录客户浏览器的相关信息.
2) 日志配置
access_log logs/access.log: 设置存储访问记录的日志
error_log logs/error.log: 设置存储记录错误发生的日志
3) SSL 证书加密
ssl_protocols: 指令用于启动特定的加密协议, nginx 在 1.1.13 和 1.0.12 版本后默认是 ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2,TLSv1.1 与 TLSv1.2 要确保 OpenSSL>= 1.0.1 ,SSLv3 现在还有很多地方在用但有不少被攻击的漏洞.
ssl prefer server ciphers: 设置协商加密算法时, 优先使用我们服务端的加密套件, 而不是客户端浏览器的加密套件
4) 压缩配置
gzip 是告诉 nginx 采用 gzip 压缩的形式发送数据. 这将会减少我们发送的数据量.
gzip_disable 为指定的客户端禁用 gzip 功能. 我们设置成 IE6 或者更低版本以使我们的方案能够广泛兼容.
gzip_static 告诉 nginx 在压缩资源之前, 先查找是否有预先 gzip 处理过的资源. 这要求你预先压缩你的文件(在这个例子中被注释掉了), 从而允许你使用最高压缩比, 这样 nginx 就不用再压缩这些文件了(想要更详尽的 gzip_static 的信息, 请点击这里).
gzip_proxied 允许或者禁止压缩基于请求和响应的响应流. 我们设置为 any, 意味着将会压缩所有的请求.
gzip_min_length 设置对数据启用压缩的最少字节数. 如果一个请求小于 1000 字节, 我们最好不要压缩它, 因为压缩这些小的数据会降低处理此请求的所有进程的速度.
gzip_comp_level 设置数据的压缩等级. 这个等级可以是 1-9 之间的任意数值, 9 是最慢但是压缩比最大的. 我们设置为 4, 这是一个比较折中的设置.
gzip_type 设置需要压缩的数据格式. 上面例子中已经有一些了, 你也可以再添加更多的格式.
5) 文件缓存配置
open_file_cache 打开缓存的同时也指定了缓存最大数目, 以及缓存的时间. 我们可以设置一个相对高的最大时间, 这样我们可以在它们不活动超过 20 秒后清除掉.
open_file_cache_valid 在 open_file_cache 中指定检测正确信息的间隔时间.
open_file_cache_min_uses 定义了 open_file_cache 中指令参数不活动时间期间里最小的文件数.
open_file_cache_errors 指定了当搜索一个文件时是否缓存错误信息, 也包括再次给配置中添加文件. 我们也包括了服务器模块, 这些是在不同文件中定义的. 如果你的服务器模块不在这些位置, 你就得修改这一行来指定正确的位置.
server 模块
srever 模块配置是 http 模块中的一个子模块, 用来定义一个虚拟访问主机, 也就是一个虚拟服务器的配置信息
- server {
- listen 80;
- server_name localhost 192.168.1.100;
- root /nginx/www;
- index index.PHP index.HTML index.HTML;
- charset utf-8;
- access_log logs/access.log;
- error_log logs/error.log;
- ......
- }
- server {
- listen 80 default;
- server_name _;
- return 404;
- # 这里设置一个默认的主机, 当默认访问的时候返回 404 错误
- # 也可以修改成 403 或者 500, 根据自身情况进行设置
核心配置信息如下:
server: 一个虚拟主机的配置, 一个 http 中可以配置多个 server
server_name: 用于指定 ip 地址或者域名, 多个配置之间用空格分隔
root: 表示整个 server 虚拟主机内的根目录, 所有当前主机中 Web 项目的根目录
index: 用户访问 Web 网站时的全局首页
charset: 用于设置 www / 路径中配置的网页的默认编码格式
access_log: 用于指定该虚拟主机服务器中的访问记录日志存放路径
error_log: 用于指定该虚拟主机服务器中访问错误日志的存放路径
location 模块: https://blog.csdn.net/dmw412724/article/details/79770159
location 模块是 nginx 配置中出现最多的一个配置, 主要用于配置路由访问信息
在路由访问信息配置中关联到反向代理, 负载均衡等等各项功能, 所以 location 模块也是一个非常重要的配置模块:
基本配置
- location / {
- root /nginx/www;
- index index.PHP index.HTML index.htm;
- }
location /: 表示匹配访问根目录
root: 用于指定访问根目录时, 访问虚拟主机的 Web 目录
index: 在不指定访问具体资源时, 默认展示的资源文件列表
反向代理配置方式
通过反向代理代理服务器访问模式, 通过 proxy_set 配置让客户端访问透明化
- location ~ /siteserver {
- limit_except GET POST {
- deny all;
- }
- #Nginx 提供 HTTP 的 Basic Auth 功能, 配置了 Basic Auth 之后, 需要输入正确的用户名和密码之后才能正确的访问网站.
- auth_basic "湖北国联公司官网"; #自定义名称
- auth_basic_user_file /www/server/nginx/pass_file; #自定义加密文件存放路径 . 先要到 http://tool.oschina.net/htpasswd 生成密码, 保存在自定义的文件中, 然后如上给出一个路径, 就可以有一个验证密码的过程.
- proxy_pass http://192.168.10.153:80;
- proxy_redirect off;
- proxy_set_header X-real-ip $remote_addr;
- proxy_set_header Host $http_host;
- proxy_set_header Accept-Encoding "";
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_read_timeout 36000; #设置与代理服务器的读超时时间
- #limit_except 技术资料参考 #https://blog.csdn.net/woshizhangliang999/article/details/51160877
- # 限制除 GET 与 POST 方法外的 http 方法通过
- limit_exceptGET POST {
- deny all;
- }
- chunked_transfer_encoding on;
- $args: #这个变量等于请求行中的参数, 同 $query_string
$content_length: 请求头中的 Content-length 字段.
$content_type: 请求头中的 Content-Type 字段.
$document_root: 当前请求在 root 指令中指定的值.
$host: 请求主机头字段, 否则为服务器名称.
$http_user_agent: 客户端 agent 信息
$http_cookie: 客户端 cookie 信息
$limit_rate: 这个变量可以限制连接速率.
$request_method: 客户端请求的动作, 通常为 GET 或 POST.
$remote_addr: 客户端的 IP 地址.
$remote_port: 客户端的端口.
$remote_user: 已经经过 Auth Basic Module 验证的用户名.
$request_filename: 当前请求的文件路径, 由 root 或 alias 指令与 URI 请求生成.
$scheme: HTTP 方法(如 http,https).
$server_protocol: 请求使用的协议, 通常是 HTTP/1.0 或 HTTP/1.1.
$server_addr: 服务器地址, 在完成一次系统调用后可以确定这个值.
$server_name: 服务器名称.
$server_port: 请求到达服务器的端口号.
$request_uri: 包含请求参数的原始 URI, 不包含主机名, 如:"/foo/bar.php?arg=baz".
$uri: 不带请求参数的当前 URI,$uri 不包含主机名, 如 "/foo/bar.html".
$document_uri: 与 $uri 相同.
---------------------
- # 分块数据传输, 运用于动态页面较多如果结合 Transfer-Encoding: chunked 使用, 就不必申请一个很大的字节数组了, 可以一 #块一块的输出, 更科学, 占用资源更少. 这个一般结合 Content-Encoding:gzip 使用, 即先将数据压缩, 再使用块技术传输数据.
- # 技术资料
- #sub_filter 技术资料: https://www.cnblogs.com/heruiguo/p/9076239.html
- sub_filter http://www.szbjhy.com/ #要替换的字符串
- 'www.hbsz.gov.cn'; #替换后的字符串
- sub_filter_types *;# 选定查找替换文件类型为文本型, 特殊值 "*" 匹配任何 MIME 类型
- sub_filter_once off;# 指示是否查找每个字符串以替换一次或重复替换. On 为开启, off 为关闭.
- #limit_except 技术参考资料 #https://blog.csdn.net/woshizhangliang999/article/details/51160877
- limit_except GET POST {
- deny all;
- }
- }
- location / {
- include uwsgi_params;
- uwsgi_pass localhost:8888
- }
- upstream name {
- ip_hash;
- server 192.168.1.100:8000;
- server 192.168.1.100:8001 down;
- server 192.168.1.100:8002 max_fails=3;
- server 192.168.1.100:8003 fail_timeout=20s;
- server 192.168.1.100:8004 max_fails=3 fail_timeout=20s;
- }
来源: https://www.cnblogs.com/liuage/p/10297264.html