詳解使用Go添加Nginx代理的方法示例
簡(jiǎn)介
Nginx 是一個(gè)高性能的 HTTP 服務(wù)器和反向代理服務(wù)器.
最常用的兩個(gè)功能是反向代理和負(fù)載均衡.
反向代理
反向代理是正向代理的反面.
普通的代理服務(wù)器是需要用戶(hù)主動(dòng)去設(shè)置的, 用戶(hù)在自己的電腦上設(shè)置并連接代理服務(wù)器,
從而可以隱藏自己的 IP, 使得應(yīng)用服務(wù)器不知道客戶(hù)端的 IP 地址.
而反向代理是作為應(yīng)用服務(wù)器的代理, 安裝在服務(wù)器上. 客戶(hù)端實(shí)際上訪(fǎng)問(wèn)的反向代理服務(wù)器,
反向代理服務(wù)器再去訪(fǎng)問(wèn)實(shí)際的應(yīng)用服務(wù)器, 然后將獲取到的響應(yīng)傳送給客戶(hù)端.

使用 Nginx 配置反向代理非常簡(jiǎn)單, 基礎(chǔ)配置如下:
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;
}
}
上面的配置文件中設(shè)置了一個(gè)域名 web.coolcat.com,
對(duì)這個(gè)域名的所有請(qǐng)求都會(huì)轉(zhuǎn)發(fā)到 http://web 上.
通過(guò)配置 upstream, 我們可以發(fā)現(xiàn), 實(shí)際上的流量都被轉(zhuǎn)發(fā)到了
127.0.0.1:8081 上了.
如此一來(lái), 就實(shí)現(xiàn)了反向代理.
負(fù)載均衡
負(fù)載均衡和反向代理是分不開(kāi)的, 負(fù)載均衡通常都是基于反向代理做的.
所謂的負(fù)載均衡, 指的是將多個(gè)請(qǐng)求轉(zhuǎn)發(fā)到不同的后端服務(wù)器上.
upstream web {
server 127.0.0.1:8081;
}
在上面的反向代理配置中, 只設(shè)置了一個(gè)后端服務(wù)器地址,
如果再添加幾個(gè), 就實(shí)現(xiàn)了最簡(jiǎn)單的負(fù)載均衡了.
輪詢(xún)
輪詢(xún)策略按順序分配請(qǐng)求.
upstream web {
server 192.168.1.1:8081;
server 192.168.1.2:8081;
}
加權(quán)輪詢(xún)
加權(quán)策略按比例分配請(qǐng)求.
upstream web {
server 192.168.1.1:8081 weight=4;
server 192.168.1.2:8081 weight=6;
}
上面的兩個(gè)服務(wù)器的訪(fǎng)問(wèn)概率就是四六開(kāi).
最少連接
最少連接將請(qǐng)求分配給當(dāng)前連接數(shù)最少的服務(wù)器.
upstream web {
least_conn;
server 192.168.1.1:8081;
server 192.168.1.2:8081;
}
ip_hash
來(lái)自同一個(gè) IP 的連接都會(huì)分配給同一個(gè)服務(wù)器, 通常用于 會(huì)話(huà)保持.
upstream web {
ip_hash;
server 192.168.1.1:8081;
server 192.168.1.2:8081;
}
通用 hash
使用 hash 自定義要計(jì)算的 key. 示例中使用請(qǐng)求地址.
可以選擇 consistent 參數(shù)可以指定使用一致性哈希算法.
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
總結(jié)
Nginx 是很常用的代理服務(wù)器, 它的功能非常強(qiáng)大, 性能也很好.
更多的資料請(qǐng)參考官方文檔.
當(dāng)前部分的代碼
作為版本v0.14.0
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
golang類(lèi)型斷言的實(shí)現(xiàn)示例
在Go語(yǔ)言中,類(lèi)型斷言用于從接口類(lèi)型獲取其具體類(lèi)型的值,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-10-10
Golang實(shí)現(xiàn)smtp郵件發(fā)送的示例代碼
這篇文章主要為大家詳細(xì)介紹了Golang實(shí)現(xiàn)smtp郵件發(fā)送的相關(guān)知識(shí),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
Golang協(xié)程常見(jiàn)面試題小結(jié)
本文主要介紹了Golang協(xié)程常見(jiàn)面試題小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
go語(yǔ)言制作一個(gè)gif動(dòng)態(tài)圖
這篇文章主要介紹了go制作一個(gè)gif動(dòng)態(tài)圖的相關(guān)資料,需要的朋友可以參考下2015-03-03
go-zero源碼閱讀之布隆過(guò)濾器實(shí)現(xiàn)代碼
布隆過(guò)濾器可以用于檢索一個(gè)元素是否在一個(gè)集合中。它的優(yōu)點(diǎn)是空間效率和查詢(xún)時(shí)間都比一般的算法要好的多,缺點(diǎn)是有一定的誤識(shí)別率和刪除困難,這篇文章主要介紹了go-zero源碼閱讀-布隆過(guò)濾器,需要的朋友可以參考下2023-02-02

