# server指令

<mark style="color:blue;">**server指令**</mark>用于**设置组内的服务器**，其语法结构为

```nginx
server address [parameters];
```

* <mark style="color:blue;">**address**</mark>，**服务器的地址**，可以是包含端口号的IP地址（**IP:Port**）、**域名**或者以“unix:”为前缀用于进程间通信的**Unix Domain Socket**。
* <mark style="color:blue;">**parameters**</mark>，为当前服务器配置更多属性。这些属性变量包括以下内容：
  * **weight=number**，为组内**服务器**设置**权重**，**权重值高的服务器被优先用于处理请求**。此时组内服务器的选择策略为<mark style="color:blue;">**加权轮询策略**</mark>。
  * **max\_fails=number**，设置**一个请求失败的次数**。在一定时间范围内，当对组内某台服务器请求失败的次数超过该变量设置的值时，认为该服务器无效（down）。**默认设置为1**。
  * **fail\_timeout=time**，默认设置为10 s。有两个作用：
    * 一是设置 max\_fails 指令**尝试请求某台组内服务器的超时时间；**
    * 另一个作用如果一台服务器被认为是无效（down）的，该变量设置的时间为**认为服务器无效的持续时间**。在这个时间内不再检查该服务器的状态，并一直认为它是无效（down）的。
  * **backup**，将某台组内服务器标记为**备用服务器**，只有当正常的服务器处于无效（down）状态或者繁忙（busy）状态时，该服务器才被用来处理客户端请求。
  * **down**，将某台组内服务器标记为永久的无效状态，该服务器暂不参与负载均衡

<details>

<summary>Example</summary>

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

在该示例中，我们设置了**一个名为backend的服务器组**，组内包含三台服务器，分别是

* 基于域名的backend1.example.com
  * backend1.example.com的权重设置为5，为组内最大，优先接收和处理请求；
* 基于IP地址的127.0.0.1:8080
  * 对本地服务器127.0.0.1:8080的状态检查设置是，如果在30 s内连续产生3次请求失败，则该服务器在之后的30s内被认为是无效（down）状态。
* 用于进程间通信的Unix Domain Socket。

</details>
