Nginx 是一個高性能的 HTTP 服務器和反向代理服務器.html
最經常使用的兩個功能是反向代理和負載均衡.nginx
反向代理是正向代理的反面.git
普通的代理服務器是須要用戶主動去設置的, 用戶在本身的電腦上設置並鏈接代理服務器, 從而能夠隱藏本身的 IP, 使得應用服務器不知道客戶端的 IP 地址.github
而反向代理是做爲應用服務器的代理, 安裝在服務器上. 客戶端實際上訪問的反向代理服務器, 反向代理服務器再去訪問實際的應用服務器, 而後將獲取到的響應傳送給客戶端.web
使用 Nginx 配置反向代理很是簡單, 基礎配置以下:算法
upstream web {
server 127.0.0.1:8081;
}
server {
listen 80;
server_name web.coolcat.com;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 5m;
proxy_pass http://web;
}
}
複製代碼
上面的配置文件中設置了一個域名 web.coolcat.com
, 對這個域名的全部請求都會轉發到 http://web
上.後端
經過配置 upstream
, 咱們能夠發現, 實際上的流量都被轉發到了 127.0.0.1:8081
上了.服務器
如此一來, 就實現了反向代理.負載均衡
負載均衡和反向代理是分不開的, 負載均衡一般都是基於反向代理作的.性能
所謂的負載均衡, 指的是將多個請求轉發到不一樣的後端服務器上.
upstream web {
server 127.0.0.1:8081;
}
複製代碼
在上面的反向代理配置中, 只設置了一個後端服務器地址, 若是再添加幾個, 就實現了最簡單的負載均衡了.
輪詢策略按順序分配請求.
upstream web {
server 192.168.1.1:8081;
server 192.168.1.2:8081;
}
複製代碼
加權策略按比例分配請求.
upstream web {
server 192.168.1.1:8081 weight=4;
server 192.168.1.2:8081 weight=6;
}
複製代碼
上面的兩個服務器的訪問機率就是四六開.
最少鏈接將請求分配給當前鏈接數最少的服務器.
upstream web {
least_conn;
server 192.168.1.1:8081;
server 192.168.1.2:8081;
}
複製代碼
來自同一個 IP 的鏈接都會分配給同一個服務器, 一般用於 會話保持
.
upstream web {
ip_hash;
server 192.168.1.1:8081;
server 192.168.1.2:8081;
}
複製代碼
使用 hash 自定義要計算的 key. 示例中使用請求地址. 能夠選擇 consistent
參數能夠指定使用一致性哈希算法.
upstream web {
hash $request_uri;
# hash $request_uri consistent;
server 192.168.1.1:8081;
server 192.168.1.2:8081;
}
複製代碼
參考:
Nginx 是很經常使用的代理服務器, 它的功能很是強大, 性能也很好. 更多的資料請參考 官方文檔.
做爲版本 v0.14.0