Nginx是現在最火的服務器web和反向代理服務器,反向代理是指以代理服務器來接受inte.NET上的連接請求,然后將請求轉發給內部網絡上的服務器,并將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現為一個反向代理服務器。另外在高并發方面,也有比較優異的表現。
Nginx是一款輕量級的Web服務器、反向代理服務器,基于 REST 架構風格,以統一資源描述符URI 或者統一資源定位符URL 作為溝通依據,通過 HTTP 協議提供各種網絡服務。由于它的內存占用少,啟動極快,高并發能力強,在互聯網項目中廣泛應用。
整體介紹
Nginx是一款自由的、開源的、高性能的HTTP服務器和反向代理服務器;同時也是一個IMAP、POP3、SMTP代理服務器;Nginx可以作為一個HTTP服務器進行網站的發布處理,另外Nginx可以作為反向代理進行負載均衡的實現。
1.反向代理
反向代理理解架構如下:
反向代理(Reverse Proxy)方式是指以代理服務器來接受 internet 上的連接請求,然后將請求轉發給內部網絡上的服務器,并將從服務器上得到的結果返回給 internet 上請求連接的客戶端,此時代理服務器對外就表現為一個反向代理服務器。
如圖,保存配置文件后啟動 Nginx,這樣當我們訪問 XX.XX.X.XXX 的時候,就相當于訪問 XX.XX.X.XXX:80 了。
2.負載均衡
負載均衡理解圖:
負載均衡,其原理就是將數據流量分攤到多個服務器執行,減輕每臺服務器的壓力,多臺服務器(集群)共同完成工作任務,從而提高了數據的吞吐量,多在高并發情況下使用。可使用的負載均衡策略有:輪詢(默認)、權重、ip_hash、url_hash(第三方)、fair(第三方)。
如圖,保存配置文件后啟動 Nginx,這樣當我們訪問 XX.XX.X.XXX/umc 的時候,就相當于訪問 XX.XX.X.XXX:1010 或者XX.XX.X.XXX:1010了,因為 Nginx 會自動判斷服務器的狀態,如果服務器處于不能訪問(服務器宕機)的狀態,就不會跳轉到這臺服務器,所以也避免了一臺服務器宕機影響使用的情況。
3.動靜分離
Nginx 本身也是一個靜態資源的服務器,當只有靜態資源的時候,就可以使用 Nginx 來做服務器,同時現在很流行的動靜態分離,就可以通過 Nginx 來實現,首先看看 Nginx 做靜態資源服務器。
如圖,這樣如果訪問 http:// IP 就會默認訪問到上邊的指定路徑當中index.html,如果一個網站只是靜態頁面的話,那么就可以通過這種方式來實現部署。
動靜分離,常用于前后端分離,Nginx提供的動靜分離是指把動態請求和靜態請求分離開,合適的服務器處理相應的請求,使整個服務器系統的性能、效率更高。Nginx可以根據配置對不同的請求做不同轉發,這是動態分離的基礎。靜態請求對應的靜態資源可以直接放在Nginx上做緩沖,更好的做法是放在相應的緩沖服務器上。動態請求由相應的后端服務器處理。
安裝配置
本次以Nginx1.14.2版本為例在linux服務器環境上進行安裝部署,具體操作如下:
1.環境準備
安裝make:
安裝g++:
安裝pcre和pcre-devel:
安裝zlib zlib提供了很多壓縮和解方式,nginx需要zlib對http進行gzip:
安裝openssl openssl是一個安全套接字層密碼庫,nginx要支持https,需要使用openssl:
2.安裝配置
下載nginx:
進入文件夾:
解壓:
打開文件路徑:
編譯文件:
安裝:
更改配置文件:
方式二:也可以將nginx.conf文件直接通過xftp上傳到該位置,注意將原有文件進行備份:
讓配置立即生效:
3.執行啟動
進入sbin目錄:
啟動nginx::
停止命令:
高可用配置
Keepalived是一個高可用解決方案,主要是用來防止服務器單點發生故障,可以通過和Nginx配合來實現Web服務的高可用。
1.環境準備
通過以下命令安裝Keepalived:
設置為系統服務:
關閉SElinux、配置keepalived相關配置 :
進入后做如下修改:
修改完成后,配置立即生效:
修改keepalived配置,主從機不同的地方通過黃色高亮顯示:
備份:cp
/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak:
2.腳本配置
配置 chk_nginx.sh文件:
添加如下內容:
腳本進行授權:
修改防火墻,添加對虛擬IP的監聽:
3.啟停服務
開啟keepalived服務:
停止keepalived服務:
心得體會
本次項目Nginx的配置促使自己在網絡層面有了一定的了解,尤其是Nginx的幾個核心功能,具體包含反向代理、負載均衡等,但是這只是剛剛開始,需要學習的內容還有很多,現從后續規劃、做事方法、迭代更新方面總結如下。
1.后續規劃
每一次搭建K8S集群環境都曾配置過Nginx,但是都只是在照貓畫虎,只是把配置文件拿過來進行使用,并不理解配置文件中每段代碼的含義,只會配置某個關鍵字段信息,經過本次的知識點梳理學習到了很多,但是學無止境,對nginx的了解還是不足,例如設置權重、正向代理等等了解得不夠全面,后續更要在邏輯上對每行代碼深入研究。
2.做事方法
通過平時工作過程中對技能點的隨手記錄,在撰寫這篇文章的過程中,再一次梳理了自己的邏輯。在后續的工作中,應該文檔分門別類地整理出來,例如教程類的內容歸為一類、錯誤信息及解決方案的內容歸為一類、知識點歸為一類,以便自己對知識進行更新迭代及快速查找。筆者認為寫文檔不僅沒有浪費時間,而且通過文檔的撰為我提供了很多幫助,比如代碼的復用、類似錯誤信息的快速調試等,節省了很多時間。
3.迭代更新
近期在某些項目配置過程中遇到了內網80端口及外網端口ESB服務轉換時默認攜帶外網配置端口的問題,解決本次問題是撰寫該文檔的主要原因,具體解決方法是通過nginx配置兩個server,通過監控不同的端口使其指向不同的server來解決本次問題,但是在工作過程中發現有時會出現邏輯不清晰的情況,特別是在網絡層面的理解嚴重缺失,后續還需要不斷地深入了解。
伴隨著自身專業知識的不斷積累,對知識的認知也不斷提高。當回過頭來看自己之前記錄的工作文檔,會發現有存在很多漏點,這時就需要再次完善工作文檔。在這個完善的過程中又把初學時的理解和現在的理解做了比較,可以認識到當時的自己有哪些不足,思維邏輯有了哪些改善。技術、認知在不斷更新,工作文檔也在不斷更新,在這個不斷迭代更新的過程中,使自己的知識點不知不覺連成了線。
本文由@數通暢聯原創,歡迎轉發,僅供學習交流使用,引用請注明出處!謝謝~