1. 程式人生 > 程式設計 >詳解使用Go新增Nginx代理的方法示例

詳解使用Go新增Nginx代理的方法示例

簡介

Nginx 是一個高效能的 HTTP 伺服器和反向代理伺服器.

最常用的兩個功能是反向代理和負載均衡.

反向代理

反向代理是正向代理的反面.

普通的代理伺服器是需要使用者主動去設定的,使用者在自己的電腦上設定並連線代理伺服器,
從而可以隱藏自己的 IP,使得應用伺服器不知道客戶端的 IP 地址.

而反向代理是作為應用伺服器的代理,安裝在伺服器上. 客戶端實際上訪問的反向代理伺服器,
反向代理伺服器再去訪問實際的應用伺服器,然後將獲取到的響應傳送給客戶端.

使用 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_hash

來自同一個 IP 的連線都會分配給同一個伺服器,通常用於 會話保持.

upstream web {
 ip_hash;
 server 192.168.1.1:8081;
 server 192.168.1.2:8081;
}

通用 hash

使用 hash 自定義要計算的 key. 示例中使用請求地址.
可以選擇 consistent 引數可以指定使用一致性雜湊演算法.

upstream web {
 hash $request_uri;
 # hash $request_uri consistent;
 server 192.168.1.1:8081;
 server 192.168.1.2:8081;
}

參考:

Using nginx as HTTP load balancer

Module ngx_http_upstream_module

總結

Nginx 是很常用的代理伺服器,它的功能非常強大,效能也很好.
更多的資料請參考官方文件.

當前部分的程式碼

作為版本v0.14.0

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。