0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

nginx loadbalancer

Last updated at Posted at 2025-05-28
upstream backend_web_servers {
  server 1.1.1.1:80;
  server 2.2.2.2:80;
  server 3.3.3.3:80;
}

server {
  listen 80;
  server_name abc.example.com;

  # 定义针对所有请求的 Location 块
  location / {
    proxy_pass http://backend_web_servers;

    # 保持原始客户端 IP 和 Host 头
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}
upstream backend_web_servers {
  # round_robin (默认): 轮询。
  # 请求按顺序分配给每个服务器。这是默认行为,无需显式指定。
  server 1.1.1.1:80;
  server 2.2.2.:80;
  server 3.3.3.3:80;
}

upstream backend_web_servers {
    server 1.1.1.1:80 weight=3; # 获得 3 倍的请求
    server 2.2.2.2:80 weight=1;
    server 3.3.3.3:80 weight=1;
}

upstream backend_web_servers {
    # backup (备用服务器): 当所有主服务器都不可用时,请求才会被发送到标记为 backup 的服务器
    server 1.1.1.1:80;
    server 2.2.2.2:80;
    server 3.3.3.3:80 backup; # 作为备用服务器
}

upstream backend_web_servers {
    server 1.1.1.1:80 down; # 暂时禁用
    server 2.2.2.2:80;
}

upstream backend_web_servers {
    # least_conn (最少连接): 将新请求发送到当前活动连接数最少的服务器。适用于连接时间可能不等的场景。
    least_conn;
    server 1.1.1.1:80;
    server 2.2.2.2:80;
    server 3.3.3.3:80;
}

upstream backend_web_servers {
  # ip_hash (IP 哈希): 根据客户端的 IP 地址进行哈希计算,并将请求发送到同一个服务器。
  # 这有助于实现会话持久性(Session Affinity),确保来自同一客户端的请求始终路由到同一后端服务器。
    ip_hash;
    server 1.1.1.1:80;
    server 2.2.2.2:80;
    server 3.3.3.3:80;
}

upstream backend_web_servers {
  # random (随机 - Nginx 1.9.0+): 随机选择服务器。
    random;
    server 1.1.1.1:80;
    server 2.2.2.2:80;
    server 3.3.3.3:80;
}

upstream backend_web_servers {
    hash $request_uri consistent; # 基于请求URI进行哈希
    # hash key [consistent] (通用哈希 - Nginx 1.7.9+): 允许你基于任意键(例如 URL、请求头等)进行哈希。
    # consistent 参数用于实现一致性哈希,减少后端服务器变化时的缓存失效。
    server 1.1.1.1:80;
    server 2.2.2.2:80;
    server 3.3.3.3:80;
}

upstream backend_web_servers {
    # max_fails=N 和 fail_timeout=Xs (健康检查): Nginx 可以对后端服务器进行简单的健康检查。
    # 如果服务器在 fail_timeout 时间内连续失败 max_fails 次,则认为该服务器不健康,暂时不会再将请求转发给它。
    server 1.1.1.1:80 max_fails=3 fail_timeout=30s; # 30 秒内失败 3 次就标记为不健康
    server 2.2.2.2:80;
    server 3.3.3.3:80;
}

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?