因專案需要一個負載均衡的機制,看似用Nginx最輕鬆方便,雖然Nginx在windows下的效能比不上在Linux下,不過先完好Nginx的設定,日後要搬上Linux也方便
環境
- .NetCore 應用程式
- IIS
- Windows
下載
從 Nginx 的下載頁面就有了windows的版本,下載後找個位置放就可以直接啟動執行
設定
Nginx的設定在 conf/nginx.conf,直接加上負載均衡需要的設定
nginx.conf
#user nobody;
#工作進程數量,預設值為1
#可以依照CPU的核心數量調整
#或是給定 auto 自動判斷
worker_processes 4;
error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;
events {
#每個工作進程的最大同時連接數量
worker_connections 1024;
}
http {
include mime.types;
default_type application/json;
sendfile on;
keepalive_timeout 65;
gzip on;
#載入其他設定檔,這邊是把server相關的設定拆開處理
include default.conf;
}
default.conf
server {
#監聽80port
listen 80;
server_name 127.0.0.1;
charset utf-8;
location / {
proxy_set_header Host $host;
#load balance會改變clientIP,這邊讓他把IP繼續往下傳
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;
#指定 load balance的目標
proxy_pass http://apps;
}
}
#定義server
upstream apps {
server 127.0.0.1:81 weight=1 max_fails=3 fail_timeout=60s;
server 127.0.0.1:82 weight=2 max_fails=3 fail_timeout=60s;
}
weight
指定權重,依照上面的設定,相當於三個request,兩個請求進:82,一個請求進:81
max_fails & fail_timeout
nginx的健康檢查機制,若檢測該 serve 無法正常回應指定的 max_fails 次數,則會暫時移除這個 server,等 fail_timeout 指定的時間後再做一次確認
max_fails 預設值為 1
fail_timeout 預設值為 10s
LoadBalance 模式
nginx提供三種Load Balance的模式,方別為
- 循環,輪流發送請求給各個server
- 最少連接,把請求送個連接數量最少的server
- 用戶IP,相同的IP請求送給同一個server
循環
若不指定,預設會採用這個模式
upstream apps {
server 127.0.0.1:81
server 127.0.0.1:82
}
最少連接
在開頭加上 least_conn
upstream apps {
least_conn;
server 127.0.0.1:81
server 127.0.0.1:82
}
用戶IP
在開頭加上 ip_hash
upstream apps {
ip_hash;
server 127.0.0.1:81
server 127.0.0.1:82
}
Start
start nginx
Relaod
若nginx已經執行,需要執行command重新載入設定檔,需要使用 -s <SIGNAL> 跟nginx溝通
- stop: fast shutdown
- quit: graceful shutdown
- reload:reloading the configuration file
- reopen:reopening the log files
$ nginx -s reload
簡單筆記目前為止做的事,nginx還能玩的東西還挺多的…