ip_hash

`ip_hash` 指令通过将来自相同客户端 IP 地址的请求路由到同一 upstream 组内的同一台服务器,从而实现会话持久性。 — NGINX HTTP Core

ip_hash
upstream
语法ip_hash;
默认值none
上下文upstream
模块NGINX HTTP Core
参数none

说明

`ip_hash` 指令在 NGINX 配置的 `upstream` 块中使用,用于基于客户端 IP 地址提供一致的负载均衡。启用 `ip_hash` 后,NGINX 会对客户端的 IP 地址进行哈希,以确定 `upstream` 组中应由哪台服务器处理该请求。这意味着具有相同 IP 的用户在每个会话中都会被定向到同一台后端服务器,从而保持有状态会话,而无需通过 cookie 实现粘性会话。 请求路由是通过对客户端 IP 应用哈希函数来完成的,这确保了 IP 持续地解析到同一台服务器。如果请求来自不同的客户端(按 IP),则可能会被路由到 `upstream` 集合中的另一台服务器。该功能对于那些本身不管理会话且对服务器选择敏感的应用程序特别有用。需要注意的是,在客户端位于代理或负载均衡器后面的环境中,需要正确配置或处理 `real_ip`,以确保用于哈希的客户端 IP 是正确的。

配置示例

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

确保上游服务器能够独立处理会话,因为 `ip_hash` 不会在服务器之间共享状态。

使用 `ip_hash` 可能导致服务器之间负载分布不均,尤其是在某些 IP 发送的流量比其他 IP 多的情况下。