Nginx 反向代理實現
- 反向代理基本配置
- 負載均衡配置與參數解析
- 負載均衡算法詳解
- 反向代理基本配置
提問:什麼是反向代理其與正向代理有什麼區別?
正向代理的概念:
正向代理是指客戶端與目標服務器之間增加一個代理服務器,客戶端直接訪問代理服務器,在由代理服務器訪問目標服務器並返回客戶端並返回 。這個過程當中客戶端需要知道代理服務器地址,並配置連接。
反向代理的概念:
反向代理是指 客戶端訪問目標服務器,在目標服務內部有一個統一接入網關將請求轉發至後端真正處理的服務器並返回結果。這個過程當中客戶端不需要知道代理服務器地址,代理對客戶端而言是透明的。
反向代理與正向代理的區別
正向代理 | 反向代理 | |
---|---|---|
代理服務器位置 | 客戶端與服務都能連接的們位置 | 目標服務器內部 |
主要作用 | 屏蔽客戶端IP、集中式緩存、解決客戶端不能直連服務端的問題。 | 屏蔽服務端內部實現、負載均衡、緩存。 |
應用場景 | 爬蟲、翻牆、maven 的nexus 服務 | Nginx 、Apache負載均衡應用 |
Nginx代理基本配置
Nginx 代理只需要配置 location 中配置proxy_pass 屬性即可。其指向代理的服務器地址。
# 正向代理到baidu 服務
location = /baidu.html {
proxy_pass http://www.baidu.com;
}
# 反向代理至 本機的8010服務
location /luban/ {
proxy_pass http://127.0.0.1:8010;
}
代理相關參數:
# 代理服務
proxy_pass
# 是否允許重定向
proxy_redirect off;
# 傳 header 參數至後端服務
proxy_set_header Host $host;
# 設置request header 即客戶端IP 地址
proxy_set_header X-Forwarded-For $remote_addr;
# 連接代理服務超時時間
proxy_connect_timeout 90;
# 請求發送最大時間
proxy_send_timeout 90;
# 讀取最大時間
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
2.負載均衡配置與參數解析
通過proxy_pass 可以把請求代理至後端服務,但是爲了實現更高的負載及性能, 我們的後端服務通常是多個, 這個是時候可以通過upstream 模塊實現負載均衡。
演示upstream 的實現。
upstream backend {
server 127.0.0.1:8010 weight=1;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:8030 weight=1 backup;
}
location / {
proxy_pass http://backend;
}
upstream 相關參數:
- server 反向服務地址 加端口
- **weight **權重
- **max_fails **失敗多少次 認爲主機已掛掉則,踢出
- **fail_timeout **踢出後重新探測時間
- **backup **備用服務
- **max_conns **允許最大連接數
- **slow_start **當節點恢復,不立即加入,而是等待 slow_start 後加入服務對列。
3.upstream 負載均衡算法介紹
- **ll+weight: **輪詢加權重 (默認)
- **ip_hash : **基於Hash 計算 ,用於保持session 一至性
- url_hash: 靜態資源緩存,節約存儲,加快速度(第三方)
- **least_conn **:最少鏈接(第三方)
- **least_time **:最小的響應時間,計算節點平均響應時間,然後取響應最快的那個,分配更高權重(第三方)