我們思考一個問題: 前端發(fā)送的請求,是如何請求到后端服務的?
前端請求地址:http://localhost/api/employee/login
后端接口地址:http://localhost:8080/admin/employee/login
很明顯,兩個地址不一致,那是如何請求到后端服務的呢?
1、nginx反向代理
nginx 反向代理,就是將前端發(fā)送的動態(tài)請求由 nginx 轉發(fā)到后端服務器

那為什么不直接通過瀏覽器直接請求后臺服務端,需要通過nginx反向代理呢?
2、nginx 反向代理的好處
-
提高訪問速度
因為nginx本身可以進行緩存,如果訪問的同一接口,并且做了數(shù)據(jù)緩存,nginx就直接可把數(shù)據(jù)返回,不需要真正地訪問服務端,從而提高訪問速度。
-
進行負載均衡
所謂負載均衡,就是把大量的請求按照我們指定的方式均衡的分配給集群中的每臺服務器。
-
保證后端服務安全
因為一般后臺服務地址不會暴露,所以使用瀏覽器不能直接訪問,可以把nginx作為請求訪問的入口,請求到達nginx后轉發(fā)到具體的服務中,從而保證后端服務的安全。

3、nginx 反向代理的配置方式
-
提高訪問速度
因為nginx本身可以進行緩存,如果訪問的同一接口,并且做了數(shù)據(jù)緩存,nginx就直接可把數(shù)據(jù)返回,不需要真正地訪問服務端,從而提高訪問速度。
-
進行負載均衡
所謂負載均衡,就是把大量的請求按照我們指定的方式均衡的分配給集群中的每臺服務器。
-
保證后端服務安全
因為一般后臺服務地址不會暴露,所以使用瀏覽器不能直接訪問,可以把nginx作為請求訪問的入口,請求到達nginx后轉發(fā)到具體的服務中,從而保證后端服務的安全。

server{
listen 80;
server_name localhost;
location /api/{
proxy_pass http://localhost:8080/admin/; #反向代理
}
}
**proxy_pass:**該指令是用來設置代理服務器的地址,可以是主機名稱,IP地址加端口號等形式。
如上代碼的含義是:監(jiān)聽80端口號, 然后當我們訪問 http://localhost:80/api/…/…這樣的接口的時候,它會通過 location /api/ {} 這樣的反向代理到 http://localhost:8080/admin/上來。
接下來,進到nginx-1.20.2\conf,打開nginx配置
# 反向代理,處理管理端發(fā)送的請求
location /api/ {
proxy_pass http://localhost:8080/admin/;
#proxy_pass http://webservers/admin/;
}
當在訪問http://localhost/api/employee/login,nginx接收到請求后轉到http://localhost:8080/admin/,故最終的請求地址為http://localhost:8080/admin/employee/login,和后臺服務的訪問地址一致。
nginx 負載均衡
當如果服務以集群的方式進行部署時,那nginx在轉發(fā)請求到服務器時就需要做相應的負載均衡。其實,負載均衡從本質(zhì)上來說也是基于反向代理來實現(xiàn)的,最終都是轉發(fā)請求。
5、nginx 負載均衡的配置方式
upstream webservers{
server 192.168.100.128:8080;
server 192.168.100.129:8080;
}
server{
listen 80;
server_name localhost;
location /api/{
proxy_pass http://webservers/admin;#負載均衡
}
}
**upstream:**如果代理服務器是一組服務器的話,我們可以使用upstream指令配置后端服務器組。
如上代碼的含義是:監(jiān)聽80端口號, 然后當我們訪問 http://localhost:80/api/…/…這樣的接口的時候,它會通過 location /api/ {} 這樣的反向代理到 http://webservers/admin,根據(jù)webservers名稱找到一組服務器,根據(jù)設置的負載均衡策略(默認是輪詢)轉發(fā)到具體的服務器。
**注:**upstream后面的名稱可自定義,但要上下保持一致。
6、nginx 負載均衡策略
名稱 | 說明 |
---|---|
輪詢 | 默認方式 |
weight | 權重方式,默認為1,權重越高,被分配的客戶端請求就越多 |
ip_hash | 依據(jù)ip分配方式,這樣每個訪客可以固定訪問一個后端服務 |
least_conn | 依據(jù)最少連接方式,把請求優(yōu)先分配給連接數(shù)少的后端服務 |
url_hash | 依據(jù)url分配方式,這樣相同的url會被分配到同一個后端服務 |
fair | 依據(jù)響應時間方式,響應時間短的服務將會被優(yōu)先分配 |
具體配置方式:
輪詢:
upstream webservers{
server 192.168.100.128:8080;
server 192.168.100.129:8080;
}
weight:
upstream webservers{
server 192.168.100.128:8080 weight=90;
server 192.168.100.129:8080 weight=10;
}
ip_hash:
upstream webservers{
ip_hash;
server 192.168.100.128:8080;
server 192.168.100.129:8080;
}
least_conn:
upstream webservers{
least_conn;
server 192.168.100.128:8080;
server 192.168.100.129:8080;
}
url_hash:文章來源:http://www.zghlxwxcb.cn/news/detail-834371.html
upstream webservers{
hash &request_uri;
server 192.168.100.128:8080;
server 192.168.100.129:8080;
}
fair:文章來源地址http://www.zghlxwxcb.cn/news/detail-834371.html
upstream webservers{
server 192.168.100.128:8080;
server 192.168.100.129:8080;
fair;
}
到了這里,關于【java蒼穹外賣項目實戰(zhàn)三】nginx反向代理和負載均衡的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!