使用 Go 添加 Nginx 代理

帥氣貓咪 · · 201 次點擊 · · 開始瀏覽    

簡介

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;
}

參考:

總結

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

當前部分的代碼

作為版本 v0.14.0

本文來自:Segmentfault

感謝作者:帥氣貓咪

查看原文:使用 Go 添加 Nginx 代理

入群交流(和以上內容無關):Go中文網 QQ 交流群:729884609 或加微信入微信群:274768166 備注:入群;關注公眾號:Go語言中文網

201 次點擊  
加入收藏 微博
暫無回復
添加一條新回復 (您需要 登錄 后才能回復 沒有賬號 ?)
  • 請盡量讓自己的回復能夠對別人有幫助
  • 支持 Markdown 格式, **粗體**、~~刪除線~~、`單行代碼`
  • 支持 @ 本站用戶;支持表情(輸入 : 提示),見 Emoji cheat sheet
  • 圖片支持拖拽、截圖粘貼等方式上傳