教程揭秘 | 動(dòng)力節(jié)點(diǎn)內(nèi)部Java零基礎(chǔ)教學(xué)文檔第十三篇:Nginx
接上期后續(xù)
本期分享第十三章節(jié)
Nginx
已經(jīng)分享一大半了,你們都跟上了嗎?
每天都在學(xué)習(xí)嘛?
有什么不會(huì)的嘛?
今日教學(xué)文檔分享來(lái)了?

今日新篇章
【Nginx】
主要內(nèi)容
1.?nginx概述
2.?nginx的安裝
3.?nginx的基礎(chǔ)配置
4.?nginx的反向代理
5.?nginx負(fù)載均衡
學(xué)習(xí)目標(biāo)

1.?【熟悉】服務(wù)器概述
1.1?目前常見的web服務(wù)器
1,Apache(http://httpd.apache.org)
? ? 它是世界上用的最多的web服務(wù)器,市場(chǎng)占有率達(dá)60%左右,模塊非常豐富,系統(tǒng)非常穩(wěn)定,可移植性好,但是比較消耗資源
2,lighttpd(http://www.lighttpd.net)
? ? 它是德國(guó)人開發(fā)的一個(gè)開源軟件,目標(biāo)是提供一個(gè)高性能的網(wǎng)站,它具有內(nèi)存開銷低,cpu占用低,效能好及模塊豐富,Nginx的重要競(jìng)爭(zhēng)對(duì)手之一
3,tomcat(http://tomcat.apache.org)
? ? 是一個(gè)開源的軟件,運(yùn)行servlet+jsp web應(yīng)用軟件,對(duì)靜態(tài)文件,高并發(fā)的處理能力弱。
4,IBM websphere
? ? 它功能完善,開放的Web應(yīng)用程序服務(wù)器,是IBM電子商務(wù)計(jì)劃的核心部分,它是基于java的應(yīng)用環(huán)境,范圍從簡(jiǎn)單到高級(jí)到企業(yè)級(jí)應(yīng)用,相于對(duì)其它web服務(wù)器來(lái)說(shuō)應(yīng)該比較少
5,Microsoft IIS
? ? ?Microsoft的web服務(wù)器產(chǎn)品為Internet information Server (IIS) ?IIS提供了圖形界面管理工具,IIS是一種web服務(wù)器組件,其中有 web服務(wù)器,F(xiàn)TP服務(wù)器,nntp服務(wù)器,smtp服務(wù)器,因?yàn)橛衱indow2008和2012的支持,所以IIS也有一定的市場(chǎng)
1.2?各web服務(wù)器占有率
查詢網(wǎng)站
https://news.netcraft.com/
?

2.?【熟悉】Nginx概述
2.1?前言
??????為毛要用nginx服務(wù)器代理,不直接用tomcat,還做多了一次接請(qǐng)求?
2.2?為什么使用Nginx?
??????在傳統(tǒng)的Web項(xiàng)目中,并發(fā)量小,用戶使用的少。所以在低并發(fā)的情況下,用戶可以直接訪問(wèn)tomcat服務(wù)器,然后tomcat服務(wù)器返回消息給用戶。比如,我們上傳圖片:
?

當(dāng)然我們知道,為了解決并發(fā),可以使用負(fù)載均衡:也就是我們多增加幾個(gè)tomcat服務(wù)器。當(dāng)用戶訪問(wèn)的時(shí)候,請(qǐng)求可以提交到空閑的tomcat服務(wù)器上。
http://localhost:8080/crm????
8081 ?crm
8082 ?crm
?

?但是這種情況下可能會(huì)有一種這樣的問(wèn)題:上傳圖片操作。我們把圖片上傳到了tomcat1上了,當(dāng)我們要訪問(wèn)這個(gè)圖片的時(shí)候,tomcat1正好在工作,所以訪問(wèn)的請(qǐng)求就交給其他的tomcat操作,而tomcat之間的數(shù)據(jù)沒(méi)有進(jìn)行同步,所以就發(fā)生了我們要請(qǐng)求的圖片找不到。
??????為了解決這種情況,我們就想出了分布式。我們專門建立一個(gè)圖片服務(wù)器,用來(lái)存儲(chǔ)圖片。這樣當(dāng)我們都把圖片上傳的時(shí)候,不管是哪個(gè)服務(wù)器接收到圖片,都把圖片上傳到圖片服務(wù)器。
??????圖片服務(wù)器上需要安裝一個(gè)http服務(wù)器,可以使用tomcat、apache、nginx。

?看到這里大家可能會(huì)問(wèn),既然我們要選擇的是http服務(wù)器,為什么不繼續(xù)使用tomcat,而要使用Nginx?
??????原因如下:nginx常用做靜態(tài)內(nèi)容服務(wù)和代理服務(wù)器(不是你FQ那個(gè)代理),直面外來(lái)請(qǐng)求轉(zhuǎn)發(fā)給后面的應(yīng)用服務(wù)(tomcat),tomcat更多用來(lái)做做一個(gè)應(yīng)用容器,讓java web app跑在里面的東西,對(duì)應(yīng)同級(jí)別的有jboss,jetty等東西。
2.3?什么是Nginx?
??????根據(jù)前面的對(duì)比,我們可以了解到Nginx是一個(gè)http服務(wù)器。是一個(gè)使用c語(yǔ)言開發(fā)的高性能的http服務(wù)器及反向代理服務(wù)器。Nginx是一款高性能的http 服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器。由俄羅斯的程序設(shè)計(jì)師Igor Sysoev所開發(fā),官方測(cè)試nginx能夠支支撐5萬(wàn)并發(fā)鏈接,并且cpu、內(nèi)存等資源消耗卻非常低,運(yùn)行非常穩(wěn)定。
2.4??Nginx的應(yīng)用場(chǎng)景
1、 http服務(wù)器。Nginx是一個(gè)http服務(wù)可以獨(dú)立提供http服務(wù)??梢宰鼍W(wǎng)頁(yè)靜態(tài)服務(wù)器。
2、 虛擬主機(jī)??梢詫?shí)現(xiàn)在一臺(tái)服務(wù)器虛擬出多個(gè)網(wǎng)站。例如個(gè)人網(wǎng)站使用的虛擬主機(jī)。
??基于端口的,不同的端口
??基于域名的,不同域名
?3、 反向代理,負(fù)載均衡。當(dāng)網(wǎng)站的訪問(wèn)量達(dá)到一定程度后,單臺(tái)服務(wù)器不能滿足用戶的請(qǐng)求時(shí),需要用多臺(tái)服務(wù)器集群可以使用nginx做反向代理。并且多臺(tái)服務(wù)器可以平均分擔(dān)負(fù)載,不會(huì)因?yàn)槟撑_(tái)服務(wù)器負(fù)載高宕機(jī)而某臺(tái)服務(wù)器閑置的情況。
2.5?小結(jié)
??????通過(guò)了解Nginx也算是多了一門技術(shù),而且還是挺簡(jiǎn)單的,使用也比較方便。重點(diǎn)是可以給系統(tǒng)帶來(lái)很大的性能提升。
3.?【掌握】在Centos7系統(tǒng)下安裝Nginx
3.1?下載
https://nginx.org/en/download.html

3.2?上傳到linux
?

3.3?準(zhǔn)備工作安裝nginx依賴的包
因?yàn)槲覀兿螺d的是nginx的源代碼,所有以進(jìn)行編譯 ?
??????nginx是C語(yǔ)言開發(fā),建議在linux上運(yùn)行,所以我們選擇在linux上安裝Nginx
3.3.1?gcc安裝
??????安裝nginx需要先將官網(wǎng)下載的源碼進(jìn)行編譯,編譯依賴gcc環(huán)境,如果沒(méi)有g(shù)cc環(huán)境,需要安裝gcc
?yum install gcc-c++
3.3.2?PCRE安裝
??????PCRE(Perl Compatible Regular Expressions)是一個(gè)Perl庫(kù),包括 perl 兼容的正則表達(dá)式庫(kù)。nginx的http模塊使用pcre來(lái)解析正則表達(dá)式,所以需要在linux上安裝pcre庫(kù)。
?yum?install?-y?pcre?pcre-devel
??????注:pcre-devel是使用pcre開發(fā)的一個(gè)二次開發(fā)庫(kù)。nginx也需要此庫(kù)。
3.3.3?zlib安裝
??????zlib庫(kù)提供了很多種壓縮和解壓縮的方式,nginx使用zlib對(duì)http包的內(nèi)容進(jìn)行g(shù)zip,所以需要在linux上安裝zlib庫(kù)。
?yum install -y zlib zlib-devel
3.3.4?openssl安裝
??????OpenSSL 是一個(gè)強(qiáng)大的安全套接字層密碼庫(kù),囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協(xié)議,并提供豐富的應(yīng)用程序供測(cè)試或其它目的使用。?
??????nginx不僅支持http協(xié)議,還支持https(即在ssl協(xié)議上傳輸http),所以需要在linux安裝openssl庫(kù)。
?yum install -y openssl openssl-devel
3.4?解壓并重命名并放到usr/local/src/并進(jìn)入
#把解壓nginx-1.16.1.tar.gz包
tar -zxvf nginx-1.16.1.tar.gz
#修改文件夾的名字
mv nginx-1.16.1 nginx
#把nginx拷貝到/usr/local/src里面
cp -r nginx /usr/local/src
?
?

3.5?創(chuàng)建安裝地址
mkdir ?/usr/nginx
?

3.6?指定安裝路徑
cd /usr/local/src/nginx
?
?

3.7?編譯
make
3.8?安裝
make install
?

3.9?啟動(dòng)|停止|刷新
進(jìn)入/usr/nginx
?

conf 配置文件
html 默認(rèn)的靜態(tài)資源目錄
logs ?日志
sbin ?命令
3.9.1?啟動(dòng)
?

在windows下執(zhí)行: ?start nginx啟動(dòng)
3.9.2?停止
?

3.9.3?刷新【當(dāng)配置文件發(fā)生變化之后要刷新】
?

nginx -t:檢測(cè)語(yǔ)法是否正確
nginx -v: 查看nginx版本號(hào)
nginx -V: 查看nginx的詳細(xì)信息
3.10?測(cè)試
http://ip
?

4.?【掌握】Nginx基礎(chǔ)配置詳解
4.1?Nginx配置文件說(shuō)明
??????在/usr/nginx/conf目錄下nginx.conf文件是nginx的配置文件。
4.2?端口和目錄的配置
??????在nginx.conf文件中添加一個(gè)server節(jié)點(diǎn),修改端口號(hào)就可以【自行添加。不影響原來(lái)的】
也就是一個(gè)nginx里面可以跑多個(gè)端口的項(xiàng)目,這個(gè)是tomcat是有本質(zhì)的區(qū)別的
一個(gè)tomcat只能對(duì)應(yīng)一個(gè)端口的多個(gè)項(xiàng)目服務(wù)
一個(gè)nginx可以對(duì)應(yīng)多個(gè)端口下面的多個(gè)項(xiàng)目服務(wù)
?
4.3?通過(guò)域名虛擬機(jī)
?

4.3.1?修改nginx.conf配置文件
修改配置后需要重新加載配置文件:
?
4.3.2?創(chuàng)建靜態(tài)項(xiàng)目目錄和文件
在nginx目錄下創(chuàng)建兩個(gè)文件夾并把html里面的index.html復(fù)制進(jìn)去
cd /usr/nginx
mkdir test1 test2
cp html/index.html test1
cp html/index.html test1
4.3.3?刷新nginx的配置
./sbin/nginx?-s?reload
4.3.4?修改windows 的host文件指定域名的ip地址
修改
C:\Windows\System32\drivers\etc
在后面加上
192.168.15.131 ?test1.whpowernode.com
192.168.15.131 ?test2.whpowernode.com
??????然后可以通過(guò)訪問(wèn)test1.whpowernode.com或者test2.whsx.com進(jìn)行訪問(wèn)nginx。
??????需要注意的是host文件的名字要和nginx.conf文件的server_name相同。
4.4?location規(guī)則配置
4.4.1?語(yǔ)法規(guī)則
語(yǔ)法規(guī)則: location [=|~|~*|^~] /uri/ { … }??
= ?開頭表示精確匹配
?
^~ ?開頭表示uri以某個(gè)常規(guī)字符串開頭,理解為匹配 url路徑即可。nginx不對(duì)url做編碼,因此請(qǐng)求為/static/20%/aa,可以被規(guī)則^~ /static/ /aa匹配到(注意是空格)。
?
~ ?開頭表示區(qū)分大小寫的正則匹配
?
~* ??開頭表示不區(qū)分大小寫的正則匹配
?
!~ 和!~*分別為區(qū)分大小寫 不匹配 及不區(qū)分大小寫 不匹配的正則
?
/ ?通用匹配,任何請(qǐng)求都會(huì)匹配到。
?
匹配原則
?
首先匹配 =,其次匹配^~, 其次是按文件中順序的正則匹配,最后是交給 / 通用匹配。當(dāng)有匹配成功時(shí)候,停止匹配,按當(dāng)前匹配規(guī)則處理請(qǐng)求。
?
4.4.2?規(guī)則例子
規(guī)則效果
那么產(chǎn)生的效果如下:
訪問(wèn)根目錄/, 比如http://localhost/ 將匹配規(guī)則A
訪問(wèn) http://localhost/login 將匹配規(guī)則B,http://localhost/register 則匹配規(guī)則H
訪問(wèn) http://localhost/static/a.html 將匹配規(guī)則C
訪問(wèn) http://localhost/a.gif, http://localhost/b.jpg 將匹配規(guī)則D和規(guī)則E,但是規(guī)則D順序優(yōu)先,規(guī)則E不起作用,而 http://localhost/static/c.png 則優(yōu)先匹配到 規(guī)則C
訪問(wèn) http://localhost/a.PNG 則匹配規(guī)則E, 而不會(huì)匹配規(guī)則D,因?yàn)橐?guī)則E不區(qū)分大小寫。
訪問(wèn) http://localhost/a.xhtml 不會(huì)匹配規(guī)則F和規(guī)則G,http://localhost/a.XHTML不會(huì)匹配規(guī)則G,因?yàn)椴粎^(qū)分大小寫。規(guī)則F,規(guī)則G屬于排除法,符合匹配規(guī)則但是不會(huì)匹配到,所以想想看實(shí)際應(yīng)用中哪里會(huì)用到。
訪問(wèn) http://localhost/category/id/1111 則最終匹配到規(guī)則H,因?yàn)橐陨弦?guī)則都不匹配,這個(gè)時(shí)候應(yīng)該是nginx轉(zhuǎn)發(fā)請(qǐng)求給后端應(yīng)用服務(wù)器,比如tomcat(jsp),nginx作為方向代理服務(wù)器存在。
5.?【掌握】反向代理+負(fù)載均衡
5.1?正向代理
拿借錢打個(gè)比方,A想向C借錢,但是C不認(rèn)識(shí)A所以不借給他,然后A就通過(guò)B向C借錢,B借到錢之后再轉(zhuǎn)交給A,在這個(gè)過(guò)程中B就扮演了一個(gè)正向代理的角色,這個(gè)過(guò)程中,真正借錢的人是誰(shuí),C是不知道的~
我們常說(shuō)的代理也就是指正向代理,正向代理的過(guò)程,它隱藏了真實(shí)的請(qǐng)求客戶端,服務(wù)端不知道真實(shí)的客戶端是誰(shuí),客戶端請(qǐng)求的服務(wù)都被代理服務(wù)器代替來(lái)請(qǐng)求,科學(xué)上網(wǎng)工具 Shadowsocks 扮演的就是典型的正向代理角色。
比如我想訪問(wèn)www.google.com,要想翻越這堵墻,你可以在國(guó)外用Shadowsocks來(lái)搭建一臺(tái)代理服務(wù)器,代理幫我們請(qǐng)求www.google.com,代理再把請(qǐng)求響應(yīng)結(jié)果再返回給我。
?

5.2?反向代理
還用借錢的例子,A想向C借錢,然后C借給他了,但是實(shí)際上這個(gè)錢可能C向B借的~至于錢到底是誰(shuí)的,A是不知道的~;這里的C扮演著一個(gè)反向代理的角色,客戶不知道真正提供服務(wù)的人是誰(shuí)。
反向代理隱藏了真實(shí)的服務(wù)端,當(dāng)我們?cè)L問(wèn)www.baidu.com的時(shí)候,背后可能有成千上萬(wàn)臺(tái)服務(wù)器為我們服務(wù),但具體是哪一臺(tái),你不知道,也不需要知道,你只需要知道反向代理服務(wù)器是誰(shuí)就好了。www.baidu.com就是我們的反向代理服務(wù)器,反向代理服務(wù)器會(huì)幫我們把請(qǐng)求轉(zhuǎn)發(fā)到提供真實(shí)服務(wù)的服務(wù)器那里去。Nginx就是性能非常好的反向代理服務(wù)器,它可以用來(lái)做負(fù)載均衡。
?

5.3?負(fù)載均衡
網(wǎng)站的訪問(wèn)量越來(lái)越大,服務(wù)器的服務(wù)模式也得進(jìn)行相應(yīng)的升級(jí),比如分離出數(shù)據(jù)庫(kù)服務(wù)器、分離出圖片作為單獨(dú)服務(wù),這些是簡(jiǎn)單的數(shù)據(jù)的負(fù)載均衡,將壓力分散到不同的機(jī)器上。有時(shí)候來(lái)自web前端的壓力,也能讓人十分頭痛。怎樣將同一個(gè)域名的訪問(wèn)分散到兩臺(tái)或更多的機(jī)器上呢?這其實(shí)就是另一種負(fù)載均衡了,nginx自身就可以做到,只需要做個(gè)簡(jiǎn)單的配置就行。
nginx不單可以作為強(qiáng)大的web服務(wù)器,也可以作為一個(gè)反向代理服務(wù)器,而且nginx還可以按照調(diào)度規(guī)則實(shí)現(xiàn)動(dòng)態(tài)、靜態(tài)頁(yè)面的分離,可以按照輪詢、ip哈希、URL哈希、權(quán)重等多種方式對(duì)后端服務(wù)器做負(fù)載均衡,同時(shí)還支持后端服務(wù)器的健康檢查。
Nginx負(fù)載均衡一些基礎(chǔ)知識(shí):
nginx 的 upstream目前支持 4 種方式的分配?
1)、輪詢(默認(rèn))?
每個(gè)請(qǐng)求按時(shí)間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉,能自動(dòng)剔除。?
2)、weight?
指定輪詢幾率,weight和訪問(wèn)比率成正比,用于后端服務(wù)器性能不均的情況。?
2)、ip_hash?
每個(gè)請(qǐng)求按訪問(wèn)ip的hash結(jié)果分配,這樣每個(gè)訪客固定訪問(wèn)一個(gè)后端服務(wù)器,可以解決session的問(wèn)題。 ?
3)、fair(第三方)?
按后端服務(wù)器的響應(yīng)時(shí)間來(lái)分配請(qǐng)求,響應(yīng)時(shí)間短的優(yōu)先分配。 ?
4)、url_hash(第三方)
?

5.4?反向代理+負(fù)載均衡的配置
5.4.1?準(zhǔn)備工作
準(zhǔn)備war包 ?必須測(cè)試能訪問(wèn)
?

5.4.2?上傳war或jar到linux里面/root/download
?

5.4.3?復(fù)制一個(gè)tomcat
cd /usr/local/tomcat/
mv tomcat tomcat1
5.4.4?清空一個(gè)tomcat/webapps
cd tomcat1/webapps
rm -rf *
5.4.5??把download/ROOT.war放到webapps里面
?

5.4.6?修改頁(yè)面標(biāo)記 [測(cè)試時(shí)要知道訪問(wèn)的哪個(gè)tomcat]
index.html
templates/main.html
5.4.7?復(fù)制tomcat2 tomcat3
?

5.4.8?把tomcat2---conf/server.xml的所有端口+10
5.4.9?把tomcat3---conf/server.xml的所有端口+20
5.4.10?修改tomcat2 tomcat3頁(yè)面標(biāo)記
5.4.11?分別啟動(dòng)三個(gè)tomcat
?

?


?
5.4.12?測(cè)試直接訪問(wèn)三個(gè)tomcat
?

5.4.13?配置nginx.conf
5.4.13.1?配置1 默認(rèn)輪詢
?

5.4.13.2?配置2 默認(rèn)權(quán)重和ip_hash
?

5.5?登陸session的配置問(wèn)題
5.5.1?不使用session,換用cookie
session是存放在服務(wù)器端的,cookie是存放在客戶端的,我們可以把用戶訪問(wèn)頁(yè)面產(chǎn)生的session放到cookie里面,就是以cookie為中轉(zhuǎn)站。你訪問(wèn)web服務(wù)器A,產(chǎn)生了session然后把它放到cookie里面,當(dāng)你的請(qǐng)求被分配到B服務(wù)器時(shí),服務(wù)器B先判斷服務(wù)器有沒(méi)有這個(gè)session,如果沒(méi)有,再去看看客戶端的cookie里面有沒(méi)有這個(gè)session,如果也沒(méi)有,說(shuō)明session真的不存,如果cookie里面有,就把cookie里面的sessoin同步到服務(wù)器B,這樣就可以實(shí)現(xiàn)session的同步了。
說(shuō)明:這種方法實(shí)現(xiàn)起來(lái)簡(jiǎn)單,方便,也不會(huì)加大數(shù)據(jù)庫(kù)的負(fù)擔(dān),但是如果客戶端把cookie禁掉了的話,那么session就無(wú)從同步了,這樣會(huì)給網(wǎng)站帶來(lái)?yè)p失;cookie的安全性不高,雖然它已經(jīng)加了密,但是還是可以偽造的。
5.5.2?session存在數(shù)據(jù)庫(kù)(MySQL等)中
可以配置將session保存在數(shù)據(jù)庫(kù)中,這種方法是把存放session的表和其他數(shù)據(jù)庫(kù)表放在一起,如果mysql也做了集群了話,每個(gè)mysql節(jié)點(diǎn)都要有這張表,并且這張session表的數(shù)據(jù)表要實(shí)時(shí)同步。
說(shuō)明:用數(shù)據(jù)庫(kù)來(lái)同步session,會(huì)加大數(shù)據(jù)庫(kù)的IO,增加數(shù)據(jù)庫(kù)的負(fù)擔(dān)。而且數(shù)據(jù)庫(kù)讀寫速度較慢,不利于session的適時(shí)同步。
5.5.3?session存在memcache或者redis中
memcache可以做分布式,php配置文件中設(shè)置存儲(chǔ)方式為memcache,這樣php自己會(huì)建立一個(gè)session集群,將session數(shù)據(jù)存儲(chǔ)在memcache中。
說(shuō)明:以這種方式來(lái)同步session,不會(huì)加大數(shù)據(jù)庫(kù)的負(fù)擔(dān),并且安全性比用cookie大大的提高,把session放到內(nèi)存里面,比從文件中讀取要快很多。但是memcache把內(nèi)存分成很多種規(guī)格的存儲(chǔ)塊,有塊就有大小,這種方式也就決定了,memcache不能完全利用內(nèi)存,會(huì)產(chǎn)生內(nèi)存碎片,如果存儲(chǔ)塊不足,還會(huì)產(chǎn)生內(nèi)存溢出。
5.5.4?ip_hash
?nginx中的ip_hash技術(shù)能夠?qū)⒛硞€(gè)ip的請(qǐng)求定向到同一臺(tái)后端應(yīng)用服務(wù)器,這樣一來(lái)這個(gè)ip下的某個(gè)客戶端和某個(gè)后端就能建立起穩(wěn)固的session,ip_hash是在upstream配置中定義的:
說(shuō)明:因?yàn)檫@種方式只能用IP來(lái)分配后端,所以要求nginx一定要是最前端的服務(wù)器,否則nginx會(huì)取不到真實(shí)的客戶端ip,那ip_hash就失效了。例如在服務(wù)器架構(gòu)中使用squid做前端高速緩存,那么nginx取到的就是squid服務(wù)器的ip,用這個(gè)ip來(lái)做ip_hash肯定是不對(duì)的。再有,如果nginx的后端還有其他的負(fù)載均衡,將請(qǐng)求又分流了,那么對(duì)于某個(gè)客戶端的請(qǐng)求,肯定不能定位到同一臺(tái)應(yīng)用服務(wù)器(例如php的fast-cgi服務(wù)器等),這樣也不能做到session共享,如果在nginx后面再做負(fù)載均衡,我們可以再搭一臺(tái)squid,然后再直接到應(yīng)用服務(wù)器,或者用 location作一次分流,將需要session的部分請(qǐng)求通過(guò)ip_hash分流,剩下的走其它后端。

更多干貨我們下期再說(shuō)!
下期會(huì)分享
第十四章節(jié)
SpringBoot
相關(guān)知識(shí)~
下期見!

教程揭秘 | 動(dòng)力節(jié)點(diǎn)內(nèi)部Java零基礎(chǔ)教學(xué)文檔第十三篇:Nginx的評(píng)論 (共 條)
