全棧運(yùn)行原理
一個(gè)網(wǎng)站是怎么來(lái)的?
Git篇
隔離項(xiàng)目和原有Git工程聯(lián)系
如果你想隔離項(xiàng)目并與原有Git工程的聯(lián)系,刪除.git
文件是其中的一種方法,但并不是唯一的方法。刪除.git
文件將刪除Git版本控制的歷史記錄和配置信息,從而斷開(kāi)與原有Git倉(cāng)庫(kù)的連接。
以下是一些可能的方法來(lái)隔離項(xiàng)目和原有Git工程的聯(lián)系:
-
刪除
.git
文件夾:在項(xiàng)目的根目錄中,刪除.git
文件夾或者通過(guò)命令行運(yùn)行rm -rf .git
(請(qǐng)注意,這是一個(gè)潛在的危險(xiǎn)操作,請(qǐng)謹(jǐn)慎使用)。這將刪除Git倉(cāng)庫(kù)相關(guān)的所有信息,包括歷史記錄、分支和配置。 -
克隆項(xiàng)目:將項(xiàng)目克隆到一個(gè)新的目錄中。使用
git clone
命令來(lái)創(chuàng)建一個(gè)項(xiàng)目的獨(dú)立副本,這個(gè)副本將與原有Git工程沒(méi)有任何聯(lián)系。然后,你可以刪除原始項(xiàng)目與Git倉(cāng)庫(kù)的連接。 -
創(chuàng)建新的Git倉(cāng)庫(kù):在項(xiàng)目的根目錄中初始化一個(gè)新的Git倉(cāng)庫(kù)。通過(guò)運(yùn)行
git init
命令,可以創(chuàng)建一個(gè)全新的Git倉(cāng)庫(kù),并在項(xiàng)目中重新開(kāi)始版本控制。這將與原有Git工程完全分離。
不論你選擇哪種方法,刪除.git
文件或創(chuàng)建一個(gè)全新的Git倉(cāng)庫(kù),都會(huì)斷開(kāi)項(xiàng)目與原有Git工程的聯(lián)系,使其成為獨(dú)立的實(shí)體。
Git沖突的原因通常有以下幾種:
代碼合并時(shí)才會(huì)發(fā)生沖突,合并時(shí)以改動(dòng)代碼處為準(zhǔn)覆蓋原始代碼(文件+行=位置),若改動(dòng)代碼處有多個(gè)非原始的改動(dòng)版本(多方)則沖突。
合法代碼合并方式:
1、基于原始版本的代碼改動(dòng)。
2、合并時(shí)是覆蓋改動(dòng)前原始版本代碼而非其他方版本。(先pull再push)
沖突產(chǎn)生的根本原因是:多方改動(dòng)后的同一個(gè)文件的同一塊區(qū)域的內(nèi)容不同。
單一賬號(hào)改動(dòng)的同一區(qū)域內(nèi)容不會(huì)沖突。
同時(shí)修改了同一行代碼:當(dāng)兩個(gè)人同時(shí)修改了同一行代碼時(shí),Git無(wú)法判斷哪個(gè)修改是正確的,因此會(huì)產(chǎn)生沖突。
修改了同一文件的不同部分:當(dāng)兩個(gè)人修改了同一文件的不同部分時(shí),Git會(huì)嘗試合并這些修改,但如果這些修改之間存在沖突(修改同一行),就會(huì)產(chǎn)生沖突。
合并分支時(shí):當(dāng)合并兩個(gè)分支時(shí),如果這兩個(gè)分支都修改了同一文件的同一行,就會(huì)產(chǎn)生沖突。
當(dāng)Git發(fā)現(xiàn)沖突時(shí),會(huì)在沖突的文件中標(biāo)記出沖突的部分,并在文件中添加特殊的標(biāo)記,如"<<<<<<<
HEAD"和"=======“和”>>>>>>>",以表示沖突的部分。此時(shí)需要手動(dòng)解決沖突,即選擇哪個(gè)修改是正確的,然后將特殊標(biāo)記刪除,保存文件并提交修改。
IDEA篇
IDEA常用操作
IDEA常用快捷鍵
CTR+ALT+L:快速格式化代碼。
CTR+左擊:類(lèi)名/方法名則直接進(jìn)入對(duì)應(yīng)類(lèi)和方法。
右上角放大鏡搜索,可以設(shè)定搜索范圍。
IDEA查看并修改編解碼方式
Git可視化操作(提交代碼前先pull更新merge最新版本一下再push,保證提交的最終項(xiàng)目是最新)
注意:pull的次數(shù)不要太多,防止將別人測(cè)試版pull下來(lái),push的時(shí)候和正式版產(chǎn)生沖突。
盡量初始化項(xiàng)目pull一次,提交之前pull一次,最后push。
若是產(chǎn)生沖突就需要新開(kāi)窗口pull下來(lái)最新的cv上自己的然后push。
pull后融合,改動(dòng)的地方以工作區(qū)為主,其余地方以遠(yuǎn)程倉(cāng)庫(kù)為主,若本地和遠(yuǎn)程相差過(guò)大則沖突
IDEA的git操作教程
pull下來(lái)遠(yuǎn)程倉(cāng)庫(kù)
方法一
此處若是未配置用戶名和密碼會(huì)彈出輸入框
方法二
或者直接用上述辦法一直接pull下來(lái)對(duì)應(yīng)的遠(yuǎn)程倉(cāng)庫(kù),這樣會(huì)直接配置連接上對(duì)應(yīng)的遠(yuǎn)程倉(cāng)庫(kù)。(若未輸入用戶名密碼則會(huì)彈出來(lái)對(duì)應(yīng)輸入框)
配置連接遠(yuǎn)程數(shù)據(jù)庫(kù)
選中項(xiàng)目然后右鍵
方法三
log:分支狀態(tài)可視化
git log:查看當(dāng)前(HEAD指向)分支的所有(empty到HEAD)版本
檢查一遍
最后push
方法三
最終若是push出問(wèn)題直接force push
IDEA中Git沖突的產(chǎn)生及解決方法
IDEA中Git沖突的產(chǎn)生及解決方法
沖突產(chǎn)生的根本原因是:多方改動(dòng)后的同一個(gè)文件的同一塊區(qū)域的內(nèi)容不同(行列數(shù)定位)。
單一賬號(hào)改動(dòng)的同一區(qū)域內(nèi)容不會(huì)沖突。
不同賬號(hào)改動(dòng)的同一區(qū)域同一行會(huì)沖突。
Git問(wèn)題:1.push時(shí)候遇到錯(cuò)誤,push失敗
究其原因是為了保證head指向的代碼同步為最新版本。
push失敗的情況,是因?yàn)槲覀冊(cè)趐ush提交代碼的時(shí)候,遠(yuǎn)程倉(cāng)庫(kù)已經(jīng)發(fā)生變化了(遠(yuǎn)程head頭指針與本地保存的遠(yuǎn)程head頭指針指向不同),換句話說(shuō)就是在這個(gè)期間(上一次拉取代碼到本次提交代碼),有其他人在我們之前提交了代碼到我們想要推送的分支,導(dǎo)致遠(yuǎn)程倉(cāng)庫(kù)代碼更新變化了。所以git拒絕了本次push。
Idea如何查看本地自動(dòng)保存的代碼版本
恢復(fù)歷史數(shù)據(jù)
VSCode篇
更新遠(yuǎn)程Git倉(cāng)庫(kù)賬號(hào)信息
VSCode錯(cuò)誤提示:“未能對(duì) git remote 進(jìn)行身份驗(yàn)證”,請(qǐng)更新git賬號(hào)信息
注意:
Internet地址或網(wǎng)絡(luò)地址:遠(yuǎn)程Git倉(cāng)庫(kù)域名或者IP:PORT,不是具體的項(xiàng)目鏈接。
開(kāi)發(fā)篇
網(wǎng)絡(luò)資源,信息搜索技巧
網(wǎng)絡(luò)資源、信息搜索技巧
本地查詢域名對(duì)應(yīng)IP
CMD看域名的辦法:ping 域名
前端原理實(shí)戰(zhàn)
網(wǎng)頁(yè)請(qǐng)求:靜態(tài)資源(圖片,ccs,js,html等)+(后端)網(wǎng)絡(luò)url數(shù)據(jù)請(qǐng)求
F12后臺(tái)
網(wǎng)絡(luò)------>全部/所有:(前端服務(wù)器)靜態(tài)資源獲取html,jpg,css,js等+(后端服務(wù)器)網(wǎng)絡(luò)url數(shù)據(jù)請(qǐng)求 。
網(wǎng)絡(luò)------>Fetch/XHR------>(后端)網(wǎng)絡(luò)url數(shù)據(jù)請(qǐng)求。
網(wǎng)頁(yè)前端內(nèi)容都是從數(shù)據(jù)包的response的body和源碼資源中提取的。
網(wǎng)頁(yè)的全部信息以及資源都是基于數(shù)據(jù)包。
數(shù)據(jù)包中資源如圖所示
選中后右鍵檢查元素,直接定位對(duì)應(yīng)源代碼。
前端后端交互三要素
- 頁(yè)面功能名稱(中英)。
- request訪問(wèn)url(post、get)和傳參(數(shù)據(jù)格式和個(gè)數(shù))。
- response返回結(jié)構(gòu)以及key健含義。
什么是虛擬私有云?什么是VPC?
什么是虛擬私有云?什么是VPC?
阿里云架構(gòu)參考
阿里云VPC下Kubernetes的網(wǎng)絡(luò)地址段
網(wǎng)絡(luò)是怎樣連接的?
IPV4的數(shù)量局限性導(dǎo)致VPC應(yīng)運(yùn)而生。(私網(wǎng)IP=假I(mǎi)P)
在創(chuàng)建VPC選擇的地址段。只能從10.0.0.0/8,172.16.0.0/12,192.168.0.0/16三者當(dāng)中選擇一個(gè)。
網(wǎng)段是VPC下容器的網(wǎng)段。
基礎(chǔ)知識(shí)
簡(jiǎn)介:
每個(gè)虛擬私有云VPC由一個(gè)私網(wǎng)網(wǎng)段、路由表和至少一個(gè)子網(wǎng)組成。
網(wǎng)絡(luò)隔離:將大網(wǎng)拆分成一張張小網(wǎng),小網(wǎng)之間默認(rèn)是不通信。
網(wǎng)內(nèi)互通:同一專(zhuān)有網(wǎng)絡(luò)內(nèi)的不同交換機(jī)之間內(nèi)網(wǎng)互通
通過(guò)隔離來(lái)實(shí)現(xiàn)測(cè)試環(huán)境,開(kāi)發(fā)環(huán)境,生產(chǎn)環(huán)境等業(yè)務(wù)隔離。
虛擬私有云(Virtual Private Cloud,VPC),為云服務(wù)器、云容器、云數(shù)據(jù)庫(kù)等云上資源構(gòu)建隔離、私密的虛擬網(wǎng)絡(luò)環(huán)境。VPC豐富的功能幫助您靈活管理云上網(wǎng)絡(luò),包括創(chuàng)建子網(wǎng)、設(shè)置安全組和網(wǎng)絡(luò)ACL、管理路由表、申請(qǐng)彈性公網(wǎng)IP和帶寬等。此外,您還可以通過(guò)云專(zhuān)線、VPN等服務(wù)將VPC與傳統(tǒng)的數(shù)據(jù)中心互聯(lián)互通,靈活整合資源,構(gòu)建混合云網(wǎng)絡(luò)。
產(chǎn)品架構(gòu)
虛擬私有云VPC產(chǎn)品架構(gòu)可以分為:VPC的組成、安全、VPC連接。
VPC通過(guò)劃分網(wǎng)段,交換機(jī)再去子集劃分很清晰;NAT網(wǎng)關(guān)是直接對(duì)整個(gè)VPC起作用的;
NAT網(wǎng)關(guān)(最外層—看門(mén)員)
NAT網(wǎng)關(guān)是唯一確定公網(wǎng)IP的代理人。
- NAT 網(wǎng)關(guān)綁了一個(gè)公網(wǎng) IP。
- NAT 網(wǎng)關(guān)就是 VPC 和公網(wǎng)之間的一個(gè)轉(zhuǎn)換器。
NAT網(wǎng)關(guān)位于云網(wǎng)絡(luò)安全邊界(看門(mén)員),用于實(shí)現(xiàn)云上私有網(wǎng)絡(luò)(即內(nèi)部網(wǎng)絡(luò))與公網(wǎng)的地址轉(zhuǎn)換,從而允許內(nèi)部網(wǎng)絡(luò)中的設(shè)備訪問(wèn)公網(wǎng)資源。
NAT網(wǎng)關(guān)的工作原理可以便是IP地址轉(zhuǎn)換(私網(wǎng)->公網(wǎng))。這種地址轉(zhuǎn)換過(guò)程需要在NAT網(wǎng)關(guān)上進(jìn)行配置,還需要建立端口映射關(guān)系。
NAT網(wǎng)關(guān)是物通博聯(lián)推出的一款物聯(lián)網(wǎng)設(shè)備,它可以將私有網(wǎng)絡(luò)中的IP地址轉(zhuǎn)換為公共網(wǎng)絡(luò)中的IP地址,從而實(shí)現(xiàn)內(nèi)部網(wǎng)絡(luò)與外部網(wǎng)絡(luò)的通信。它還負(fù)責(zé)處理各種網(wǎng)絡(luò)協(xié)議,確保數(shù)據(jù)在不同網(wǎng)絡(luò)之間的傳輸能夠順利進(jìn)行。NAT網(wǎng)關(guān)通常被部署在工廠設(shè)備上層接口上,以便對(duì)內(nèi)部網(wǎng)絡(luò)進(jìn)行地址轉(zhuǎn)換和數(shù)據(jù)轉(zhuǎn)發(fā)。
工廠通常擁有多個(gè)局域網(wǎng)絡(luò),通過(guò)NAT網(wǎng)關(guān)可以將這些局域網(wǎng)絡(luò)與互聯(lián)網(wǎng)連接起來(lái),實(shí)現(xiàn)內(nèi)部設(shè)備與外部網(wǎng)絡(luò)的通信。同時(shí),NAT網(wǎng)關(guān)還可以防止外部網(wǎng)絡(luò)的攻擊,提高企業(yè)的網(wǎng)絡(luò)安全。
每一個(gè)小的局域網(wǎng)都會(huì)使用一個(gè)網(wǎng)段的私網(wǎng)地址,在與外界連接時(shí)再通過(guò)NAT網(wǎng)關(guān)變成公網(wǎng)地址。
NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換): 私有網(wǎng)絡(luò)可以使用網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)來(lái)映射多個(gè)私有 IP 地址到單個(gè)公共 IP 地址,以便內(nèi)部網(wǎng)絡(luò)中的多個(gè)設(shè)備可以共享一個(gè)公共 IP 地址。
CLB負(fù)載均衡
負(fù)載均衡(CLB)是對(duì)多臺(tái)云服務(wù)器和裸金屬服務(wù)器進(jìn)行流量分發(fā)的服務(wù)。通過(guò)流量分發(fā)擴(kuò)展應(yīng)用系統(tǒng)對(duì)外的服務(wù)能力,消除單點(diǎn)故障提升應(yīng)用系統(tǒng)的可用性。
傳統(tǒng)型負(fù)載均衡CLB(Classic Load Balancer)是將訪問(wèn)流量根據(jù)轉(zhuǎn)發(fā)策略分發(fā)到后端多臺(tái)云服務(wù)器(ECS實(shí)例)的流量分發(fā)控制服務(wù)。CLB擴(kuò)展了應(yīng)用的服務(wù)能力,增強(qiáng)了應(yīng)用的可用性。
CLB云負(fù)載均衡器(Cloud Load Balance,簡(jiǎn)稱CLB)將來(lái)自VPC外部的訪問(wèn)流量自動(dòng)分發(fā)到VPC內(nèi)的云資源實(shí)例,擴(kuò)展用戶應(yīng)用系統(tǒng)對(duì)外的服務(wù)能力,實(shí)現(xiàn)更高水平的應(yīng)用容錯(cuò)
CLB負(fù)載均衡的IP:PORT可能是NAT的公網(wǎng)IP也可能是代理后的私網(wǎng)假I(mǎi)P。
CLB由以下三個(gè)部分組成:
- CLB實(shí)例 (Instances)
一個(gè)CLB實(shí)例是一個(gè)運(yùn)行的負(fù)載均衡服務(wù),用來(lái)接收流量并將其分配給后端服務(wù)器。要使用負(fù)載均衡服務(wù),您必須創(chuàng)建一個(gè)CLB實(shí)例,并至少添加一個(gè)監(jiān)聽(tīng)和兩臺(tái)ECS實(shí)例。 - 監(jiān)聽(tīng) (Listeners) 監(jiān)聽(tīng)用來(lái)檢查客戶端請(qǐng)求并將請(qǐng)求轉(zhuǎn)發(fā)給后端服務(wù)器。監(jiān)聽(tīng)也會(huì)對(duì)后端服務(wù)器進(jìn)行健康檢查。
- 后端服務(wù)器(Backend Servers)
后端服務(wù)器是一組接收前端請(qǐng)求的ECS實(shí)例。您可以單獨(dú)添加ECS實(shí)例到后端服務(wù)器池,也可以通過(guò)虛擬服務(wù)器組或主備服務(wù)器組來(lái)批量添加和管理。
打網(wǎng)------不同VPC下如何網(wǎng)絡(luò)聯(lián)通
VPC之間的網(wǎng)絡(luò)聯(lián)通實(shí)踐
VPC有多種連接方案,以滿足用戶不同場(chǎng)景下的訴求。
-
通過(guò)VPC對(duì)等連接功能,實(shí)現(xiàn)同一區(qū)域內(nèi)不同VPC下的私網(wǎng)IP互通。
-
通過(guò)EIP或NAT網(wǎng)關(guān),使得VPC內(nèi)的云服務(wù)器可以與公網(wǎng)Internet互通。
此種方法只要打通源NAT網(wǎng)關(guān)和目標(biāo)端的網(wǎng)絡(luò)則NAT網(wǎng)關(guān)下的所有容器都可以訪問(wèn)該目標(biāo)端。
打網(wǎng)信息:
1、源私網(wǎng)NAT網(wǎng)關(guān)IP:PORT
2、目標(biāo)端私網(wǎng)NAT網(wǎng)關(guān)IP:PORT
3、目標(biāo)端私網(wǎng)容器IP:PORT
由于打通的是源私網(wǎng)的NAT網(wǎng)關(guān)到目標(biāo)端私網(wǎng)容器的網(wǎng),所以源NAT網(wǎng)關(guān)下的容器都可以訪問(wèn)目標(biāo)端容器. -
通過(guò)虛擬專(zhuān)用網(wǎng)絡(luò)VPN、云連接、云專(zhuān)線及VPC二層連接網(wǎng)關(guān)功能將VPC和您的數(shù)據(jù)中心連通
Nginx部署及應(yīng)用原理
前端必備的nginx知識(shí)點(diǎn)
NG原理:資源訪問(wèn)就靠NG管理、限制等
必須主動(dòng)觸發(fā)Nginx監(jiān)聽(tīng)的端口才能實(shí)現(xiàn)Nginx代理
IP:PORT-IP定位Nginx所在容器,PORT觸發(fā)Nginx監(jiān)聽(tīng)代理。
URL就是網(wǎng)絡(luò)資源的地址,只有知道URL才能訪問(wèn)到網(wǎng)絡(luò)資源,就像知道家庭住址才能找到對(duì)應(yīng)人一樣。
地址代理,資源尋址。
底層邏輯:根據(jù)最終NG代理的URL地址尋找資源,地址信息(IP:PORT,URL等)。
Nginx代理前端頁(yè)面和后端請(qǐng)求區(qū)別
- NG代理前端頁(yè)面URL,一個(gè)頁(yè)面涉及多個(gè)http資源請(qǐng)求(html,js,css等)需要考慮到全部http請(qǐng)求的代理映射。
- NG代理后端請(qǐng)求只有一次http請(qǐng)求只需要代理好IP:PORT即可。
Nginx配置與觸發(fā)響應(yīng)
- 容器中的前端工程和Nginx打包部署在一起,內(nèi)外所有URL請(qǐng)求都是觸發(fā)后從Nginx代理發(fā)出。
- 容器中會(huì)將訪問(wèn)端口設(shè)置為Nginx的監(jiān)聽(tīng)端口這樣就能實(shí)現(xiàn)Nginx代理容器所有請(qǐng)求(自身靜態(tài)資源頁(yè)面請(qǐng)求和后端數(shù)據(jù)請(qǐng)求等)。
- 本地中的前端工程都是部署在Node上面
Nginx代理前端資源文件+后端數(shù)據(jù)請(qǐng)求路徑
底層邏輯:根據(jù)最終NG代理的地址尋找資源,地址信息(IP:PORT,URL等)。
外部IP:PORT先根據(jù)IP找到容器然后觸發(fā)Nginx監(jiān)聽(tīng)的端口后,會(huì)進(jìn)行l(wèi)ocation映射代理到對(duì)應(yīng)的url路徑訪問(wèn)前端資源或后端數(shù)據(jù)請(qǐng)求。
Nginx的工作原理就是被動(dòng)被暴露的IP:PORT觸發(fā)監(jiān)聽(tīng)端口后代理到對(duì)應(yīng)的URL請(qǐng)求資源(前端或后端)。
容器中會(huì)將訪問(wèn)端口設(shè)置為Nginx的監(jiān)聽(tīng)端口這樣就能實(shí)現(xiàn)Nginx代理容器所有請(qǐng)求(自身靜態(tài)資源頁(yè)面請(qǐng)求和后端數(shù)據(jù)請(qǐng)求等)。
必須主動(dòng)觸發(fā)Nginx監(jiān)聽(tīng)的端口才能實(shí)現(xiàn)Nginx代理
IP:PORT-IP定位Nginx所在容器,PORT觸發(fā)Nginx監(jiān)聽(tīng)代理。
IP:定位容器
PORT:觸發(fā)Nginx監(jiān)聽(tīng)端口
前端運(yùn)行環(huán)境區(qū)別
本地都是編譯打包跑在Node上,容器是npm run build編譯打包資源放到內(nèi)存由Nginx代理Url請(qǐng)求前端靜態(tài)資源。
前端容器只跑了一個(gè)NG,其余的是靜態(tài)資源存儲(chǔ)在內(nèi)存中。
前端工程先npm install下載package.json中依賴和命令腳本(npm start等命令)為node_modules再將其中的依賴和頁(yè)面等npm run build(webpack)打包為資源文件夾.
npm run build=dist包=node_modules依賴+src,config等工程文件=打包為一個(gè)一個(gè)資源文件包(可通過(guò)analyze查看每個(gè)包的原始路徑就能看到有的根路徑是node_modules有的是src)
Nginx并不負(fù)責(zé)編譯運(yùn)行代碼只負(fù)責(zé)代理url請(qǐng)求原生代碼頁(yè)面資源,最終瀏覽器編譯運(yùn)行原生代碼頁(yè)面,出錯(cuò)會(huì)在瀏覽器控制臺(tái)console報(bào)出來(lái)。
瀏覽器運(yùn)行打包好的umi.js等資源文件實(shí)現(xiàn)路由映射等功能。
Nginx轉(zhuǎn)發(fā)流程(監(jiān)聽(tīng)端口和啟動(dòng)端口)
項(xiàng)目訪問(wèn)Nginx工程的IP:PORT/path才會(huì)實(shí)現(xiàn)路徑/path/映射
IP是Nginx搭載的工程IP,PORT是Nginx監(jiān)聽(tīng)端口。
映射路徑的編寫(xiě)方法:
proxy_pass :末尾帶/不拼location,不帶/拼location
假設(shè)下面四種情況分別用 http://47.168.10.1:8001/proxy/test.html 進(jìn)行訪問(wèn)
location /proxy/ {
proxy_pass http://127.0.0.1:8001/;
}
代理到URL:http://127.0.0.1:8001/test.html
location /proxy/ {
proxy_pass http://127.0.0.1:8001;
}
代理到URL:http://127.0.0.1:8001/proxy/test.html
location /proxy/ {
proxy_pass http://127.0.0.1:8001/aaa/;
}
代理到URL:http://127.0.0.1:8001/aaa/test.html
location /proxy/ {
proxy_pass http://127.0.0.1:8001/aaa;
}
代理到URL:http://127.0.0.1:8001/aaatest.html
———————————————— 版權(quán)聲明:本文為CSDN博主「白小白的小白」的原創(chuàng)文章,遵循CC 4.0
BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_42874635/article/details/115702184
Nginx跨域配置
在 Nginx 中實(shí)現(xiàn)跨域配置可以通過(guò)設(shè)置HTTP頭部來(lái)實(shí)現(xiàn)。以下是一種常見(jiàn)的配置方式,可以允許所有域名的訪問(wèn),適用于開(kāi)發(fā)環(huán)境和測(cè)試環(huán)境。生產(chǎn)環(huán)境中應(yīng)根據(jù)實(shí)際情況進(jìn)行更嚴(yán)格的配置。
假設(shè)你的應(yīng)用運(yùn)行在 http://example.com
,而 API 服務(wù)運(yùn)行在 http://api.example.com
,并且你希望應(yīng)用可以通過(guò) AJAX 調(diào)用 API,可以按照以下步驟進(jìn)行配置。
-
在 Nginx 的配置文件中找到相關(guān)的
server
塊,一般位于/etc/nginx/nginx.conf
或/etc/nginx/conf.d/default.conf
。 -
在
server
塊中添加以下配置,啟用跨域支持:
server {
listen 80;
server_name example.com;
location / {
# 允許所有來(lái)源的請(qǐng)求
add_header 'Access-Control-Allow-Origin' '*';
# 允許的請(qǐng)求方法
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
# 允許的請(qǐng)求頭
add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept, Authorization';
# 允許攜帶身份驗(yàn)證信息
add_header 'Access-Control-Allow-Credentials' 'true';
# 如果是 OPTIONS 請(qǐng)求(預(yù)檢請(qǐng)求),直接返回 200
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept, Authorization';
add_header 'Access-Control-Allow-Credentials' 'true';
return 200;
}
# ... 其他處理請(qǐng)求的配置
}
# ... 其他配置
}
- 保存配置文件并重啟 Nginx 服務(wù),使配置生效:
sudo service nginx restart
完成以上配置后,你的應(yīng)用就可以通過(guò) AJAX 調(diào)用 http://api.example.com
上的 API 服務(wù)了,并且可以允許來(lái)自任何來(lái)源的請(qǐng)求。請(qǐng)注意,這是一種簡(jiǎn)單的開(kāi)發(fā)環(huán)境配置,生產(chǎn)環(huán)境中應(yīng)根據(jù)實(shí)際需求做出更嚴(yán)格的配置,比如只允許特定的域名訪問(wèn)。
Nginx匹配規(guī)則
在Nginx中,location
塊的匹配優(yōu)先級(jí)是按照以下規(guī)則進(jìn)行的:
-
首先,Nginx會(huì)優(yōu)先匹配最具體的
location
塊。具體意味著其定義更具體的匹配條件,通常是使用正則表達(dá)式或前綴路徑更長(zhǎng)的塊。如果一個(gè)請(qǐng)求URI同時(shí)匹配多個(gè)location
塊,Nginx將選擇最具體的塊進(jìn)行處理。 -
如果多個(gè)
location
塊具有相同的具體性,那么匹配順序?qū)⒂膳渲梦募谐霈F(xiàn)的順序決定。配置文件中出現(xiàn)得越早的location
塊將具有更高的優(yōu)先級(jí),將會(huì)被優(yōu)先匹配并執(zhí)行。
重合度越高的location
塊并不一定會(huì)執(zhí)行,實(shí)際執(zhí)行的是最具體的、首先匹配的location
塊。因此,雖然某些請(qǐng)求可能同時(shí)匹配多個(gè)location
塊,但只會(huì)執(zhí)行最具體且最先匹配的那個(gè)塊。
舉例說(shuō)明:
假設(shè)有以下兩個(gè)location
塊的Nginx配置:
location / {
root /usr/share/nginx/html/;
try_files $uri $uri/ /index.html;
}
location ~ .*\.(gif|jpg|jpeg|png|js|css)$ {
alias /usr/share/nginx/static/;
}
對(duì)于請(qǐng)求http://example.com/image.jpg
,它同時(shí)匹配到兩個(gè)location
塊,但是由于第二個(gè)塊更具體(使用正則表達(dá)式匹配特定文件后綴),Nginx會(huì)選擇執(zhí)行第二個(gè)塊的配置,而不會(huì)執(zhí)行第一個(gè)塊的配置。因?yàn)樵谶@個(gè)例子中,第二個(gè)塊更具體,所以它優(yōu)先匹配并執(zhí)行。
nginx配置https操作指引
HTTPS 的加密過(guò)程及其工作原理
nginx–HTTPS服務(wù)
HTTPS 的加密過(guò)程可以分為以下步驟:
- 瀏覽器客戶端向服務(wù)器發(fā)送 HTTPS 請(qǐng)求。
- 服務(wù)器將公鑰證書(shū)發(fā)送給客戶端。
- 客戶端驗(yàn)證服務(wù)器的證書(shū)。
- 如果驗(yàn)證通過(guò),客戶端生成一個(gè)用于會(huì)話的對(duì)稱密鑰。
- 客戶端使用服務(wù)器的公鑰對(duì)對(duì)稱密鑰進(jìn)行加密,并將加密后的密鑰發(fā)送給服務(wù)器。
- 服務(wù)器使用私鑰對(duì)客戶端發(fā)送的加密密鑰進(jìn)行解密,得到對(duì)稱密鑰。
- 服務(wù)器和客戶端使用對(duì)稱密鑰進(jìn)行加密和解密數(shù)據(jù)傳輸。
https簡(jiǎn)介: https 默認(rèn)443 ssl證書(shū)
超文本傳輸安全協(xié)議,HTTP使用80端口通訊,而HTTPS占用443端口巡訊。但利用SSL/TLS來(lái)加密數(shù)據(jù)包。
HTTPS開(kāi)發(fā)的主要目的,是提供對(duì)網(wǎng)絡(luò)服務(wù)器的身份認(rèn)證,保護(hù)交換數(shù)據(jù)的隱私與完整性。這個(gè)協(xié)議由網(wǎng)景公司(Netscape)在1994年首次提出,隨后擴(kuò)展到互聯(lián)網(wǎng)上。
HTTPS 加密的過(guò)程中,客戶端和服務(wù)器之間建立了一個(gè)安全的通信通道。在這個(gè)通道中,數(shù)據(jù)被加密傳輸,確保了數(shù)據(jù)在傳輸過(guò)程中的機(jī)密性、完整性和真實(shí)性。
注意:監(jiān)聽(tīng)https://ip:port/url需要證書(shū),但是監(jiān)聽(tīng)http代理轉(zhuǎn)發(fā)為https://ip:port/url不需要證書(shū)
- Nginx監(jiān)聽(tīng)http協(xié)議請(qǐng)求并反向代理轉(zhuǎn)發(fā)為https無(wú)需證書(shū),可以直接代理。
location /xxx/ {
proxy_pass https://IP:PORT/;
proxy_http_version 1.1;
}
- Nginx默認(rèn)只監(jiān)聽(tīng)http協(xié)議請(qǐng)求并反向代理,如果需要監(jiān)聽(tīng)https請(qǐng)求則需要配置證書(shū)。
HTTPS代理配置
server {
listen 443 ssl; # 監(jiān)聽(tīng)443端口,啟用SSL
ssl_certificate /path/to/your/certificate.crt; # 你的SSL證書(shū)路徑
ssl_certificate_key /path/to/your/private.key; # 你的SSL私鑰路徑
location /xxx/ {
proxy_pass https://IP:PORT/;
proxy_http_version 1.1;
}
}
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-499299.html
Docker容器
容器網(wǎng)絡(luò)測(cè)試
容器中curl模擬發(fā)出請(qǐng)求可以直接在容器測(cè)試目標(biāo)端對(duì)應(yīng)請(qǐng)求的路徑和資源,查看網(wǎng)絡(luò)是否有問(wèn)題。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-499299.html
容器的域名映射
- Ng代理域名時(shí)需要在容器或host文件配置域名對(duì)應(yīng)的IP映射,否則無(wú)法使用域名。
- 只有在docker容器中配上域名和IP的映射關(guān)系才能在代碼中使用域名來(lái)實(shí)現(xiàn)功能(ng代理域名或者后端域名跳轉(zhuǎn)發(fā)請(qǐng)求)
到了這里,關(guān)于全棧開(kāi)發(fā)實(shí)戰(zhàn)那些事的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!