一、Nginx反向代理-負載均衡
?首先通過SpringBoot+Freemarker
快速搭建一個WEB
項目:springboot-web-nginx,然后在該項目中,創(chuàng)建一個IndexNginxController.java
文件,邏輯如下:
@Controller
public class IndexNginxController {
@Value("${server.port}")
private String port;
@RequestMapping("/")
public ModelAndView index(){
ModelAndView model = new ModelAndView();
model.addObject("port", port);
model.setViewName("index");
return model;
}
}
在該Controller
類中,存在一個成員變量:port
,它的值即是從application.properties
配置文件中獲取server.port
值。當出現(xiàn)訪問/
資源的請求時,跳轉(zhuǎn)前端index
頁面,并將該值攜帶返回。
前端的index.ftl
文件代碼如下:
<html>
<head>
<title>Nginx演示頁面</title>
<link href="nginx_style.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div style="border: 2px solid red;margin: auto;width: 800px;text-align: center">
<div id="nginx_title">
<h1>歡迎來到熊貓高級會所,我是竹子${port}號!</h1>
</div>
</div>
</body>
</html>
從上可以看出其邏輯并不復(fù)雜,僅是從響應(yīng)中獲取了port
輸出。
OK~,前提工作準備就緒后,再簡單修改一下nginx.conf
的配置即可:
upstream nginx_boot{
# 30s內(nèi)檢查心跳發(fā)送兩次包,未回復(fù)就代表該機器宕機,請求分發(fā)權(quán)重比為1:2
server 192.168.0.000:8080 weight=100 max_fails=2 fail_timeout=30s;
server 192.168.0.000:8090 weight=200 max_fails=2 fail_timeout=30s;
# 這里的IP請配置成你WEB服務(wù)所在的機器IP
}
server {
location / {
root html;
# 配置一下index的地址,最后加上index.ftl。
index index.html index.htm index.jsp index.ftl;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 請求交給名為nginx_boot的upstream上
proxy_pass http://nginx_boot;
}
}
至此,所有的前提工作準備就緒,緊接著再啟動
Nginx
,然后再啟動兩個web
服務(wù),第一個WEB
服務(wù)啟動時,在application.properties
配置文件中,將端口號改為8080
,第二個WEB
服務(wù)啟動時,將其端口號改為8090
。
最終來看看效果:
因為配置了請求分發(fā)的權(quán)重,8080、8090
的權(quán)重比為2:1
,因此請求會根據(jù)權(quán)重比均攤到每臺機器,也就是8080
一次、8090
兩次、8080
一次......
二、Nginx請求分發(fā)原理
? ?客戶端發(fā)出的請求192.168.12.129
最終會轉(zhuǎn)變?yōu)椋?code>http://192.168.12.129:80/,然后再向目標IP
發(fā)起請求,流程如下:文章來源:http://www.zghlxwxcb.cn/news/detail-848429.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-848429.html
- 由于
Nginx
監(jiān)聽了192.168.12.129
的80
端口,所以最終該請求會找到Nginx
進程; -
Nginx
首先會根據(jù)配置的location
規(guī)則進行匹配,根據(jù)客戶端的請求路徑/
,會定位到location /{}
規(guī)則; - 然后根據(jù)該
location
中配置的proxy_pass
會再找到名為nginx_boot
的upstream
; - 最后根據(jù)
upstream
中的配置信息,將請求轉(zhuǎn)發(fā)到運行WEB
服務(wù)的機器處理,由于配置了多個WEB
服務(wù),且配置了權(quán)重值,因此Nginx
會依次根據(jù)權(quán)重比分發(fā)請求。
到了這里,關(guān)于深入淺出 -- 系統(tǒng)架構(gòu)之負載均衡Nginx反向代理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!