前言
在后端開發期間,會為前端或者平台上提供API服務接口,這時、我們看完今天的文章可以詳細了解到Nginx反向代理到后端服務上的過程。
Nginx:
是一個高性能的HTTP和反向代理web服務器,同時也提供了IMAP/POP3/SMTP服務。可以做反向代理、正向代理,靜態服務器等。
負載均衡算法:
upstrem支持4種負載均衡調度算法:
輪詢(weight):每個請求按時間順序逐一分配到不同的后端服務器上,默認為輪詢方式
url_hash:按訪問URL的Hash來分配請求
ip_hash:按訪問IP的Hash來分配請求,如果用戶的ip固定不變,也同時可以解決session的問題
fair:根據頁面大小和加載時間智能的分配請求,響應時間短的優先分配
反向代理:
客戶端-->代理<-->服務端
舉例說明:
比如在北京租房子,我們就好比客戶端,我愛我家中介好比代理,實際上我們不一定能看到房主(服務端)
我們在租房子的過程中,知道中介是誰,但是不知道房主是誰。
服務器三台:
server 192.168.0.1
server 192.168.0.2
server 192.168.0.3
webApi服務:
Go語言基於gin框架開發的HTTP服務,服務啟動監聽10080端口號
/usr/local/brand/bin/webApi --config-dir=/usr/local/webApi/config api
Nginx配置:
# 進程數,一般情況下與CPU個數一致
worker_processes 24;
events {
use epoll;
#單個worker process進程的最大並發鏈接數
worker_connections 65535;
}
http {
# 其他配置省略
include vhosts/api.test.com.conf;
}
api.test.com.conf配置:
server_name為api.test.com,監聽80端口,將所有請求轉發到http://192.168.0.*:10080下面
cat /usr/local/nginx/conf/vhost/api.test.com.conf
# 配置負載均衡,均衡負責輪詢的方式進行負載
upstream api.test.com {
# server 要代理到的服務器節點,weight是輪詢的權重
server 192.168.0.1:10080 weight=1;
server 192.168.0.2:10080 weight=1;
server 192.168.0.3:10080 weight=1;
}
server {
listen 80;
server_name api.test.com;
access_log /data/log/nginx/api.test.com.access.log;
error_log /data/log/nginx/api.test.com.error.log;
location / {
# proxy_pass 要注意如何url以"/"結尾,則表示絕對路徑,否則表示相對路徑
proxy_pass http://api.test.com;
}
}
我們請求后返回:http://api.test.com/d/a?page=1&page_size=20,對應的結果有5條記錄,這個時候已經說明請求是成功的。
Nginx訪問日志如下:
==> /data/log/nginx/api.test.com.access.log <==
192.168.0.123 - - [22/Apr/2020:22:01:01 +0800] "GET /d/a?page=1&page_size=20 HTTP/1.1" 200 656 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36"
已經成功的訪問到了我們的Nginx+Go服務。
總結
本文中實踐了Nginx代理到后端Go服務的知識,部署簡單,實用。