
文章插圖
每一次故障排查都是一筆財富,各種狗血經(jīng)過不表,解決問題之后的那種滿足是不可替代的 。
背景發(fā)布系統(tǒng)架構(gòu)圖簡化如下:
發(fā)布架構(gòu)圖
管理員通過Jenkins調(diào)用“發(fā)布程序(代號varian,以下簡稱varian)”,發(fā)布程序會進(jìn)行一系列的初始化操作,完成后生成Docker鏡像上傳到Docker倉庫,容器集群更新鏡像,用戶通過負(fù)載均衡訪問我們的容器集群 。
老的varian采用shell+python開發(fā),配合Jenkins(jdk1.7)進(jìn)行發(fā)布,因內(nèi)部項目較多,寫了很多兼容腳本,代碼比較亂 。
我們計劃對varian進(jìn)行重構(gòu),完全采用python開發(fā),各個功能模塊化,不同類型的項目用樂高的思想拼裝模塊部署發(fā)布,降低耦合 。
并將jenkins升級到最新版本,jdk同樣升級到1.8 。新的varian已經(jīng)開發(fā)完成,現(xiàn)在開始部署測試了,故事就由此開始 。
為了降低對現(xiàn)有項目的影響決定重新部署一套新的環(huán)境,完全測試通過后將老環(huán)境廢棄,直接啟用新環(huán)境,新環(huán)境信息如下:
系統(tǒng):Debian8語言:Python3.4JDK1.8 + Jenkins2.134故障處理過程解決nginx訪問403的問題通過 Jenkins 調(diào)用varian正常部署了一個靜態(tài)項目(純html,css,js等靜態(tài)資源),通過負(fù)載均衡訪問容器集群(參考上邊架構(gòu)圖),發(fā)現(xiàn)頁面樣式無法加載,瀏覽器按F12調(diào)出控制臺發(fā)現(xiàn)個CSS文件返回403狀態(tài):
chrome F12調(diào)試
web服務(wù)用的nginx,腦海里迅速過了一遍什么情況下nginx會返回403:
nginx配置了白名單,client端訪問的IP不在白名單內(nèi)
訪問的路徑是個目錄,而nginx配置了禁止列目錄
訪問的路徑是個文件,但nginx服務(wù)配置的用戶和用戶組對文件沒有讀取權(quán)限
目錄索引index 配置錯誤,例如你的目錄下只有index.html,你卻配置了index.shmtl或index.php等等
index index.shtml index.php;常見的有以上問題會導(dǎo)致nginx返回403,迅速排查了一下,發(fā)現(xiàn)就是權(quán)限的問題導(dǎo)致的,nginx配置的用戶和用戶組為www-data,而css文件的屬主屬組都是root,且其他用戶沒有任何權(quán)限:
這里再詳細(xì)講解下linux下的文件權(quán)限,以上邊的csl.css文件為例:
-rw-r----- 1 root root 7.9K Jul 24 12:34 csl.css以空格分割
第一段-rw-r——-10個字符定義了文件的權(quán)限第一個字符,這里為-代表這是一個文件,還會看到像d代表目錄、l代表連接剩下九個字符,每三個一組,第2-4個字符代表屬主權(quán)限,第5-7個字符代表屬組權(quán)限,第8-10個字符代表其他用戶的權(quán)限其中每一組三個字符分別為r、w、x,用數(shù)字表示r=4、w=2、x=1,分別代表讀、寫、執(zhí)行權(quán)限,如果這個字符有值表明有這個權(quán)限,例如上邊css文件的權(quán)限就為屬主有rw讀寫權(quán)限,屬組只有r權(quán)限,其他用戶沒有權(quán)限第二段為一個數(shù)字,表示文件的連接數(shù)第三段root表示用戶的屬主為root第四段root表示用戶的屬組也為root第五段則表示文件大小后邊三段為修改時間最后一段為文件名tomcat8 UMASK經(jīng)過反復(fù)測試,發(fā)現(xiàn)我直接在linux下通過控制臺執(zhí)行python腳本的方式發(fā)布部署最終文件權(quán)限正常,但是同樣的腳本經(jīng)過Jenkins執(zhí)行后權(quán)限就不對了 。
控制臺執(zhí)行跟Jenkins執(zhí)行有什么區(qū)別?賬號不一樣啊,遂把jenkins項目、tomcat文件都改成屬主屬組都為root重新執(zhí)行,發(fā)現(xiàn)還是一樣的結(jié)果 。
再想想還有哪里不對,這個css文件是程序生成的,生成的文件權(quán)限不對,umask!這個詞突然蹦出來,對,應(yīng)該就是umask,他控制了生成新文件的權(quán)限 。
簡單介紹下什么是umask:
umask值用來設(shè)置用戶在創(chuàng)建文件時的默認(rèn)權(quán)限,跟設(shè)置文件權(quán)限命令chmod是相對的,總共四位,不過我們通常只用后三位,同樣對應(yīng)屬主屬組以及其他用戶的權(quán)限,例如你的賬號umask值為0022(可直接通過umask命令查看) 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時就醫(yī)或請專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- jq請求ajax的方法 ajax發(fā)送數(shù)據(jù)格式
- 郭剛堂認(rèn)親后首發(fā)聲!連說5個感謝,還有一個請求 江辰唐楚楚小說全文免費閱讀
- nginx虛擬主機(jī)講解 nginx虛擬主機(jī)是什么
- 微信分享全部聊天記錄的方法 微信轉(zhuǎn)發(fā)聊天記錄怎么轉(zhuǎn)
- 微信內(nèi)容如何轉(zhuǎn)發(fā)? 微信如何轉(zhuǎn)發(fā)
- 一鍵轉(zhuǎn)發(fā)別人朋友圈小技巧 為什么發(fā)朋友圈文字只顯示一行
- 拼多多后微信被盜 轉(zhuǎn)發(fā)拼多多的教訓(xùn)
- ps 保存 無法完成請求,因為程序錯誤 完美解決:ps保存時無法完成請求因為程序錯誤
- QQ里面的Q幣能轉(zhuǎn)發(fā)嗎? Q幣怎么轉(zhuǎn)給別人?
- 實拍印度總統(tǒng)府,警衛(wèi)松懈,主動請求游客一起拍照
