簡單的負載平衡範例
#user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
upstream backend1 {
server www1.example.com; #正常用這個
server www2.example.com; #正常用這個
server www3.example.com; #正常用這個
}
upstream backend2 {
server www1.example.com; #正常用這個
server nowork.example.com down; #暫時不用的....
server backup.example.com backup; #備援
}
upstream backend3 {
server www.example.com max_fails=1 fail_timeout=10s; #健康檢查,錯誤一次會進入休眠狀態10秒
server bad.example.com max_fails=1 fail_timeout=10s;
server bak.example.com max_fails=1 fail_timeout=10s;
}
upstream backend4 {
server www.example.com weight=3; #預設是1 所以這個會收到三倍的量
server bad.example.com;
server bak.example.com;
}
server {
listen 80;
server_name localhost; #可以改成真正的domain
add_header 'Access-Control-Allow-Origin' '*'; #允許所有來源訪問
location / {
add_header Access-Control-Allow-Origin *;
try_files $uri @backend;
}
location @backend {
proxy_pass http://backend; #指定 backend 這個服務當作後端
#proxy_next_upstream error timeout http_500; #如果回應500 error/ timeout 會嘗試下一台
proxy_set_header X-Real-IP $remote_addr; #把IP送給反向代理的 server
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #把Protocol送給反向代理的 server
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto; #把Protocol送給反向代理的 server
}
}
}
這裡提供了 upstream 的幾種設定方法(可以混用)
- proxy_pass http://backend; 這邊可以指定要用哪套 upstream
- 正常來說會使用 backend1 就可以部署多台後端伺服器
- backend2 提供了 down /backup 的描述,down不會被用到,但是backup 在正常機器失效時會被拿來使用
- backend3 是健康檢查機制,可以在嘗試一次(max_fail 設定值) 失敗後,讓這個server 先暫時不被使用10秒鐘,當下會先嘗試使用其他的server
- backend4 提供 權重的資訊,正常不寫的話都是1 ,但可以加上weight 來調整各個server 的權重比例,畢竟不是全部機器效能都一樣