[Nginx] 使用轉址做負載平衡
Ref:
有個需求是這樣的
現在前端使用某一個 url,
假設是 http://example.com/test
然後希望前端載入這個網址的時候,
可以讓這個 url 隨機導向N個不同的網域,
假設是 a.example.com, b.example.com, c.example.com
但是後面路徑要是一樣的
也就是
http://example.com/test?t=1 -> http://c.example.com/test?t=1
這樣該怎麼做呢?
先假設 nginx 路徑是安裝在 /usr/local/nginx
先建立一個 /usr/local/nginx_module的目錄
安裝這個 module 要先下載另一個 ngx_devel_kit
先到 https://github.com/simplresty/ngx_devel_kit/tags 找個版本下載
然後接著下載 set-misc 這個 module
先到 https://github.com/openresty/set-misc-nginx-module/tags 找個版本下載
然後重新編譯原本安裝的 nginx, 但記得先備份
之後就可以在 nginx conf 檔內新增
不過我相信應該沒有很多人有這種特殊的需求XD
- http://blog.51cto.com/smileyouth/1623766
- https://serverfault.com/questions/597671/load-balancing-in-nginx-with-redirect-rather-than-proxy
- https://stackoverflow.com/questions/46515842/nginx-proxy-pass-same-protocol-http-https
有個需求是這樣的
現在前端使用某一個 url,
假設是 http://example.com/test
然後希望前端載入這個網址的時候,
可以讓這個 url 隨機導向N個不同的網域,
假設是 a.example.com, b.example.com, c.example.com
但是後面路徑要是一樣的
也就是
http://example.com/test?t=1 -> http://c.example.com/test?t=1
這樣該怎麼做呢?
先假設 nginx 路徑是安裝在 /usr/local/nginx
先建立一個 /usr/local/nginx_module的目錄
安裝這個 module 要先下載另一個 ngx_devel_kit
先到 https://github.com/simplresty/ngx_devel_kit/tags 找個版本下載
cd ~ && wget https://github.com/simplresty/ngx_devel_kit/archive/v0.3.1rc1.tar.gz
tar zxfv v0.3.1rc1.tar.gz
#把解壓縮出來的目錄去掉版本號
mv ngx_devel_kit-0.3.1rc1 ngx_devel_kit && mv ngx_devel_kit /usr/local/nginx_module/
然後接著下載 set-misc 這個 module
先到 https://github.com/openresty/set-misc-nginx-module/tags 找個版本下載
cd ~ && wget https://github.com/openresty/set-misc-nginx-module/archive/v0.32.tar.gz
tar zxfv v0.32.tar.gz
#把解壓縮出來的目錄去掉版本號
mv set-misc-nginx-module-0.32 set-misc-nginx-module && mv set-misc-nginx-module /usr/local/nginx_module/
然後重新編譯原本安裝的 nginx, 但記得先備份
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.backup
#cd ~/當初下載nginx的目錄
cd ~/nginx-1.10.1
./configure --prefix=/usr/local/nginx --with-http_ssl_module \
--add-module=/usr/local/nginx_module/ngx_devel_kit \
--add-module=/usr/local/nginx_module/set-misc-nginx-module
make -j2
make install
# kill原本在跑的 nginx pid
# 用 ps aux 找出 pid 複製之後使用 kill
ps aux | grep nginx
kill pid
# 啟動 nginx
/usr/local/nginx/sbin/ngin
之後就可以在 nginx conf 檔內新增
server {
...
location / {
# 隨機亂數 1 ~ 4
set_random $loc_rnd 1 4;
if ($loc_rnd = 1) {
return 302 $scheme://a.example.com$request_uri;
}
if ($loc_rnd = 2) {
return 302 $scheme://b.example.com$request_uri;
}
if ($loc_rnd = 3) {
return 302 $scheme://c.example.com$request_uri;
}
}
}
不過我相信應該沒有很多人有這種特殊的需求XD
這是什麼樣的情境會有的需求 XD
回覆刪除不可質疑農場王XDDDD
刪除感谢博主提供了一个这样的方法,一直在寻找用重定向来做负载均衡的方式。
回覆刪除咱提供一个使用场景吧
因为咱用cloudflare的workers和GSuit团队盘搭建Goindex这种免费分享文件下载的网页,但是cf的免费额度只有10万次请求,很快就会被耗光,长期以此还容易被cf封号。
咱就是准备注册50个cloudflare账户,做一个负载均衡池。