upstream backend { server backend1.example.com; server backend2.example.com; server.backend3.example.com; } server { location / { proxy_pass http://backend; } }
upstream backend { server blog.csdn.net/poechant; server 145.223.156.89:8090; server unix:/tmp/backend3; }
upstream backend { ip_hash; server backend1.example.com; server backend2.example.com; server.backend3.example.com; }
upstream backend { server blog.csdn.net/poechant down; server 145.223.156.89:8090; server unix:/tmp/backend3; }還可以使用指定權重(weight)的方式,如下:
upstream backend { server backend1.example.com; server 123.321.123.321:456 weight=4; }
upstream backend { server backend1.example.com weight=5; server 54.244.56.3:8081 max_fails=3 fail_timeout=30s; }
在上例中,最大失敗次數為 3,也就是最多進行 3 次嘗試,且超時時間為 30秒。max_fails 的默認值為 1,fail_timeout 的默認值是 10s。傳輸失敗的情形,由 proxy_next_upstream 或 fastcgi_next_upstream 指定。而且可以使用 proxy_connect_timeout 和 proxy_read_timeout 控制 upstream 響應時間。
有一種情況需要注意,就是 upstream 中只有一個 server 時,max_fails 和 fail_timeout 參數可能不會起作用。導致的問題就是 nginx 只會嘗試一次 upstream 請求,如果失敗這個請求就被拋棄了 : ( ……解決的方法,比較取巧,就是在 upstream 中將你這個可憐的唯一 server 多寫幾次,如下:
upstream backend { server backend.example.com max_fails fail_timeout=30s; server backend.example.com max_fails fail_timeout=30s; server backend.example.com max_fails fail_timeout=30s; }
upstream backend { server backend1.example.com; server backend2.example.com backup; server backend3.example.com; }