目錄
項目名稱
項目背景
項目目標
項目成果
我的角色與職責
我主要完成的工作內容
本次項目涉及的技術
本次項目遇到的問題與解決方法
本次項目中可能被面試官問到的問題
問題1:為什么選擇nginx-1.25.4版本,nginx官方最新版本是哪一個版本?
問題2:Nginx應用場景?
問題3:Nginx 有哪些優點?
問題4:nginx中怎么配置反向代理?
問題5:什么是正向代理?
問題6:什么是反向代理?
問題8:nginx和apache的區別
問題9:什么是動態資源、靜態資源分離?
問題10:Nginx負載均衡實現的策略有哪些?
問題11:nginx的URL重定向怎么配置的?
經驗教訓與自我提升
展望未來
項目名稱
項目簡稱或代號:SUN項目(這個可以自己隨便編一個,每個公司的每個項目簡稱或代號都是內部任意起名的,顯得專業一點,一般是項目關鍵詞的首拼,比如這個CSUN是:ScaleUp Nginx)
項目全名:Nginx集群化運維升級項目 - "ScaleUp Nginx"
項目背景
隨著公司業務的發展和用戶量的不斷增長,現有的Nginx服務器集群已逐漸無法滿足高性能、高可用的要求。同時,老舊的Nginx版本存在安全隱患和性能瓶頸,需要進行升級和優化。因此,公司決定啟動"ScaleUp Nginx"項目,對Nginx集群進行全面的升級和改造。
項目目標
-
升級Nginx到[ nginx-1.25.4]版本,提高安全性和性能。
-
優化Nginx集群架構,提高系統的可擴展性和容錯能力。
-
實現Nginx集群的自動化運維,減少人工干預和錯誤。
-
制定完善的監控和告警策略,確保Nginx集群的穩定運行。
項目成果
-
成功將Nginx升級到 nginx-1.25.4版本,并通過安全測試。
-
構建了高性能、高可用的Nginx集群架構,支持水平擴展和負載均衡。
-
實現了Nginx集群的自動化運維,包括配置管理、版本更新、故障恢復等。
-
建立了完善的監控和告警系統,確保Nginx集群的穩定運行。
我的角色與職責
在"ScaleUp Nginx"項目中,我擔任運維團隊的核心成員,負責Nginx集群的升級、優化和自動化運維工作。
我主要完成的工作內容
-
研究Nginx最新版本的功能和性能,制定升級方案。
-
編寫自動化腳本,實現Nginx集群的自動化部署和配置管理。
-
優化Nginx集群架構,包括負載均衡、緩存、SSL配置等。
-
搭建監控和告警系統,實時監控Nginx集群的運行狀態。
本次項目涉及的技術
-
Nginx及其模塊(如ngx_http_ssl_module、ngx_http_proxy_module等)
-
自動化運維工具(如Ansible、Shell腳本等)
-
監控和告警系統(如Prometheus、Grafana、zibbix等)
-
版本控制系統(如Git)
本次項目遇到的問題與解決方法
問題1:nginx-1.25.4版本與現有應用存在兼容性問題。
解決方法:分析兼容性問題的原因,調整Nginx配置或應用代碼,確保兼容性。
問題2:自動化部署腳本執行過程中存在錯誤。 解決方法:檢查腳本邏輯和語法,發現因為操作系統未安裝開發工具包組件,修復錯誤并在nginx自動化安裝腳本中添加安裝開發工具包組件的相關命令,并進行充分的測試。
本次項目中可能被面試官問到的問題
問題1:為什么選擇nginx-1.25.4版本,nginx官方最新版本是哪一個版本?
nginx官方發布的版本公告為2024-04-23發布的版本nginx-1.26.1,截至2024年5.13日并未發布新版本。
選擇nginx-1.25.4版本是因為新版本nginx的功能相比于老版本更強大和更加穩定。沒有考慮最新版本是因為考慮到最新版本發布的時間并不久,可能會存在穩定性等未知因素,經綜合考慮覺得采用新版本但不能是最新的nginx版本。
問題2:Nginx應用場景?
-
http服務器。Nginx是一個http服務可以獨立提供http服務。可以做網頁靜態服務器。
-
虛擬主機。可以實現在一臺服務器虛擬出多個網站,例如個人網站使用的虛擬機。
-
反向代理,負載均衡。當網站的訪問量達到一定程度后,單臺服務器不能滿足用戶的請求時,需要用多臺服務器集群可以使用nginx做反向代理。并且多臺服務器可以平均分擔負載,不會應為某臺服務器負載高宕機而某臺服務器閑置的情況。
-
nginz 中也可以配置安全管理、比如可以使用Nginx搭建API接口網關,對每個接口服務進行攔截。
問題3:Nginx 有哪些優點?
-
跨平臺、配置簡單。
-
非阻塞、高并發連接:處理 2-3 萬并發連接數,官方監測能支持 5 萬并發。
-
內存消耗小:開啟 10 個 Nginx 才占 150M 內存。
-
成本低廉,且開源。
-
穩定性高,宕機的概率非常小。
-
內置的健康檢查功能:如果有一個服務器宕機,會做一個健康檢查,再發送的請求就不會發送到宕機的服務器了。重新將請求提交到其他的節點上
問題4:nginx中怎么配置反向代理?
在nginx配置文件的server模塊中配置要代理的后端服務器的信息,如下:
server { ?
......location / { ?proxy_pass http://ip:端口; ?proxy_set_header Host $host; ?proxy_set_header X-Real-IP $remote_addr; ?proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ?} ?
}#在server塊中,你需要指定Nginx監聽的端口和域名
#使用location指令來定義哪些URL應該被代理到后端服務器
#使用proxy_pass指令來指定請求應該被轉發到的后端服務器地址。你可以使用在upstream指令中定義的服務器組名
#使用proxy_set_header指令來設置請求頭,以便后端服務器能夠正確地處理請求
如果要代理的后端服務器比較多,也可以在upstream模塊中配置多個后端服務器地址端口信息,然后在server模塊中直接調用這個upstream模塊名稱即可
upstream name_001 { ?server backend1.example.com; ?server backend2.example.com; ?
}
?
server { ?
.......location / { ?proxy_pass http://name_001; ?} ?
}
問題5:什么是正向代理?
一個位于客戶端和原始服務器(origin server)之間的服務器,為了從原始服務器取得內容,客戶端向代理發送一個請求并指定目標(原始服務器),然后代理向原始服務器轉交請求并將獲得的內容返回給客戶端。
客戶端才能使用正向代理。正向代理總結就一句話:代理端代理的是客戶端。例如說:我們使用的OpenVPN 等等。
問題6:什么是反向代理?
反向代理(Reverse Proxy)方式,是指以代理服務器來接受 Internet上的連接請求,然后將請求,發給內部網絡上的服務器并將從服務器上得到的結果返回給 Internet 上請求連接的客戶端,此時代理服務器對外就表現為一個反向代理服務器。
問題7:nginx反向代理服務器的優點是什么?
反向代理服務器可以隱藏源服務器的存在和特征。它充當互聯網云和web服務器之間的中間層。這對于安全方面來說是很好的,特別是當使用web托管服務時。
問題8:nginx和apache的區別
-
輕量級,同樣起web服務,比apache占用更少的內存和資源。
-
抗并發,nginx處理請求是異步非阻塞的,而apache則是阻塞性的,在高并發下nginx能保持低資源,低消耗高性能。
-
高度模塊化的設計,編寫模塊相對簡單。
-
最核心的區別在于apache是同步多進程模型,一個連接對應一個進程,nginx是異步的,多個連接可以對應一個進程。
問題9:什么是動態資源、靜態資源分離?
動態資源、靜態資源分離,是讓動態網站里的動態網頁根據一定規則把不變的資源和經常變的資源區分開來,動靜資源做好了拆分以后我們就可以根據靜態資源的特點將其做緩存操作,這就是網站靜態化處理的核心思路。
動態資源、靜態資源分離簡單的概括是:動態文件與靜態文件的分離。
問題10:Nginx負載均衡實現的策略有哪些?
-
輪詢(默認):每個請求按時間順序逐一分配到不同的后端服務器,如果后端某個服務器宕機,能自動剔除故障系統。
upstream backserver { server 192.168.0.12; server 192.168.0.13;
}
-
權重 weight:weight的值越大,分配到的訪問概率越高,主要用于后端每臺服務器性能不均衡的情況下。其次是為在主從的情況下設置不同的權值,達到合理有效的地利用主機資源。
# 權重越高,在被訪問的概率越大,如上例,分別是20%,80%。
upstream backserver { server 192.168.0.12 weight=2; server 192.168.0.13 weight=8;
}
-
ip_hash( IP綁定):每個請求按訪問IP的哈希結果分配,使來自同一個IP的訪客固定訪問一臺后端服務器,并且可以有效解決動態網頁存在的session共享問題
upstream backserver { ip_hash; server 192.168.0.12:88; server 192.168.0.13:80;
}
-
fair(第三方插件):必須安裝upstream_fair模塊。
對比 weight、ip_hash更加智能的負載均衡算法,fair算法可以根據頁面大小和加載時間長短智能地進行負載均衡,響應時間短的優先分配。
# 哪個服務器的響應速度快,就將請求分配到那個服務器上。
upstream backserver { server server1; server server2; fair;
}
-
url_hash(第三方插件):必須安裝Nginx的hash軟件包
按訪問url的hash結果來分配請求,使每個url定向到同一個后端服務器,可以進一步提高后端緩存服務器的效率。
upstream backserver { server squid1:3128; server squid2:3128; hash $request_uri; hash_method crc32;
}
問題11:nginx的URL重定向怎么配置的?
-
使用
rewrite
指令進行URL重寫和重定向。rewrite
指令的基本語法是rewrite regex replacement [flag];
,其中regex
是匹配URL的正則表達式,replacement
是替換后的URL,flag
是重寫標記。 -
如果只是進行簡單的URL重定向,也可以直接使用
return
指令,如return 301 /new-url;
表示將請求永久重定向到/new-url
示例配置:將/old-url
重定向到/new-url
的示例配置如下
server { ?
......location /old-url { ?return 301 /new-url; # 永久重定向到/new-url ?} ?
......
}
使用rewrite指令進行更復雜的URL重寫和重定向:server {
......location /old-url { rewrite ^/old-url(.*)$ /new-url$1 permanent; # 永久重定向到/new-url,并保留查詢參數 }
......
}
經驗教訓與自我提升
通過本次項目,我深刻認識到運維工作的重要性和復雜性。我意識到自己在技術深度和廣度上還有待提高,特別是在自動化運維和監控方面。未來,我將繼續學習和實踐,不斷提高自己的技能和能力。
展望未來
展望未來,我將繼續關注Nginx及其相關技術的發展趨勢,不斷探索和實踐新的運維技術和方法。同時,我將與團隊成員緊密合作,共同為公司業務的穩定和發展貢獻力量。