背景
隨著業(yè)務(wù)發(fā)展, 用戶訪問(wèn)量激增,單臺(tái)服務(wù)器已經(jīng)無(wú)法滿足現(xiàn)有的訪問(wèn)壓力,研究后需要將后臺(tái)服務(wù)從原來(lái)的單臺(tái)升級(jí)為多臺(tái)服務(wù)器,那么原來(lái)的訪問(wèn)方式無(wú)法滿足,所以引入nginx來(lái)代理多臺(tái)服務(wù)器,統(tǒng)一請(qǐng)求入口。
什么是nginx
Nginx[engine x]是一個(gè)免費(fèi)開(kāi)源Web服務(wù)器,是一個(gè)HTTP和反向代理服務(wù)器,郵件代理服務(wù)器, 和一個(gè)通用的 TCP/UDP 代理服務(wù)器,最初由俄羅斯軟件工程師Igor Sysoev撰寫(xiě)。nginx專注于高性能、高并發(fā)性和低內(nèi)存使用率。能夠在高并發(fā)下給網(wǎng)站提供穩(wěn)定的服務(wù)。
相關(guān)概念
-
正向代理
請(qǐng)求概述:客戶端C知道資源D在服務(wù)器A中,但是無(wú)法直接訪問(wèn)服務(wù)器A,此時(shí)知道服務(wù)器N與服務(wù)器A在同一局域網(wǎng)中,并且可以相互訪問(wèn),因?yàn)榭蛻舳薈可以訪問(wèn)服務(wù)器N,因此客戶端C通過(guò)服務(wù)器N訪問(wèn)服務(wù)器A得到資源D
理解:
- 正向代理對(duì)于客戶端C來(lái)說(shuō)他明確知道他要訪問(wèn)的資源D在哪個(gè)服務(wù)器上;
- 對(duì)于服務(wù)器N來(lái)說(shuō)他只充當(dāng)客戶端C的中間代理角色;而對(duì)于服務(wù)器A來(lái)說(shuō)他只知道訪問(wèn)他的資源的是服務(wù)器N,根本不知道客戶端C的存在。
-
反向代理
請(qǐng)求概述:客戶端C并不知道服務(wù)器A和服務(wù)器B的存在,客戶端C只知道訪問(wèn)服務(wù)器N能獲得資源D,只不過(guò)提供客戶端C資源的都來(lái)著服務(wù)器A或者服務(wù)器B
理解:
- 反向代理對(duì)于客戶端C來(lái)說(shuō),他是不知道資源D具體在哪里,也不知道具體由誰(shuí)提供。
- 對(duì)于服務(wù)器N來(lái)說(shuō)每次都接受用戶的請(qǐng)求,然后再把請(qǐng)求根據(jù)調(diào)度策略交給提供資源D的服務(wù)器A或者B,對(duì)于服務(wù)器A和B來(lái)說(shuō)同樣也都不知道訪問(wèn)這份資源D的真實(shí)用戶是誰(shuí),只是和服務(wù)器N進(jìn)行交互。
實(shí)操nginx代理springboot服務(wù)器
注:下文所有服務(wù)基于docker環(huán)境啟動(dòng)
-
安裝nginx容器
可參考:Docker安裝鏡像操作相關(guān)命令下滑到第6步
安裝完成后可得到nginx映射在宿主機(jī)上相關(guān)的文件
并且啟動(dòng)nginx容器,映射端口:9001 -
打包springboot項(xiàng)目并docker運(yùn)行
可參考:【云原生】springboot項(xiàng)目打包部署docker鏡像為了模擬多臺(tái)服務(wù)器,本文通過(guò)修改項(xiàng)目端口號(hào)(8088、8089),上傳打包了兩個(gè)springboot項(xiàng)目鏡像,分別啟動(dòng)了一個(gè)容器
-
nginx代理配置修改
進(jìn)入宿主機(jī)中的nginx文件,進(jìn)入conf文件
打開(kāi)后編輯default.conf(注:對(duì)于nginx代理配置,主要修改這個(gè)文件)文件
1.模擬正向代理或者說(shuō)是一對(duì)一代理配置內(nèi)容:
server {
listen 80;
listen [::]:80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
#nginx自帶主頁(yè)面配置
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
# 本次配置服務(wù)器新增內(nèi)容
location /boot {
proxy_pass http://172.16.0.3:8089/web; # 單個(gè)服務(wù)器配置
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
注:配置文件新增內(nèi)容中 “/boot” 表示為映射到服務(wù)器的名稱前綴,當(dāng)代理的服務(wù)器增多,根據(jù)實(shí)際情況自定義不同的名稱,便于區(qū)分。
- 模擬反向代理或者說(shuō)代理多個(gè)服務(wù)器配置:
# 新增內(nèi)容 多個(gè)服務(wù)器配置
upstream backend {
ip_hash; #負(fù)載均衡策略
server 172.16.0.3:8089; # 第一個(gè) Tomcat 服務(wù)器的本地端口
server 172.16.0.3:8088; # 第二個(gè) Tomcat 服務(wù)器的本地端口
}
server {
listen 80;
listen [::]:80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
#nginx自帶主頁(yè)面
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#服務(wù)器配置
location /boot {
# proxy_pass http://172.16.0.3:8089/web; # 單個(gè)服務(wù)器配置
proxy_pass http://backend/web; # 多個(gè)服務(wù)器配置
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
注:上述配置中 “ip_hash” 為nginx的一種負(fù)載均衡策略。nginx支持四種負(fù)載均衡策略。
- 輪詢(Round Robin)策略
upstream backend { server 172.16.0.3:8089; # 第一個(gè) Tomcat 服務(wù)器的本地端口 server 172.16.0.3:8088; # 第二個(gè) Tomcat 服務(wù)器的本地端口 }
- 最少連接(Least Connections)策略:
upstream backend { least_conn; server 172.16.0.3:8089; # 第一個(gè) Tomcat 服務(wù)器的本地端口 server 172.16.0.3:8088; # 第二個(gè) Tomcat 服務(wù)器的本地端口 }
- IP哈希(IP Hash)策略:
upstream backend { ip_hash; server 172.16.0.3:8089; # 第一個(gè) Tomcat 服務(wù)器的本地端口 server 172.16.0.3:8088; # 第二個(gè) Tomcat 服務(wù)器的本地端口 }
- 加權(quán)輪詢(Weighted Round Robin)策略:
upstream backend { server 172.16.0.3:8089 weight=2; # 第一個(gè) Tomcat 服務(wù)器的本地端口 server 172.16.0.3:8088 weight=1; # 第二個(gè) Tomcat 服務(wù)器的本地端口 }
詳細(xì)解析可參考:Nginx負(fù)載均衡多種策略配置
-
訪問(wèn)服務(wù)器
完成上述nginx配置后,重啟nginx容器。
先不使用代理訪問(wèn)后臺(tái)客戶端:http://ip地址:8088/web/login
使用nginx代理訪問(wèn)客戶端:http://ip地址:9001/boot/login
上述地址中的端口和路由地址都發(fā)生了改變,但代理訪問(wèn)客戶端與不適用代理返回的頁(yè)面一致,則nginx代理配置成功文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-764559.html
使用nginx代理可以很好的隱藏內(nèi)部服務(wù)器的地址,不暴露在公網(wǎng)中,可配置為內(nèi)網(wǎng)地址,減少網(wǎng)絡(luò)請(qǐng)求壓力,安全性提高,只需開(kāi)放代理服務(wù)器地址供外部訪問(wèn)即可。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-764559.html
到了這里,關(guān)于【云原生】使用nginx反向代理后臺(tái)多服務(wù)器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!