工作時常會使用到 Nginx 但其實一直沒有深入了解它是什麼東西,只知道用它來做反向代理和負載平衡,趁今天這個機會,來了解一下它整個原理吧!
What is Nginx
"nginx ("engine x") is an HTTP web server, reverse proxy, content cache, load balancer, TCP/UDP proxy server, and mail proxy server."
根據 Nginx 官方的介紹,Nginx 是一個網路伺服器、反向代理、內容快取、負載平衡器、TCP/UDP 代理伺服器,它也可以作為郵件代理伺服器,支援如 IMAP、POP3 和 SMTP等。
它有這麼多功能,你一定會想說,那它最主要都被拿來做什麼呢?
因為效能和可擴展性的原因,最常見都是被拿來做網路伺服器 (web server)
What is Web server
簡單來說就是提供網路服務的一台電腦,也就是伺服器。可以把它分成兩種層面來看
- 硬體面:
- 它裡面會存放網頁所需要使用的檔案,如 HTML 文件、圖片、CSS 樣式表和 JavaScript 文件。
- 軟體面:
- 主要是 HTTP 伺服器。它可以負責處理來自網頁瀏覽器的 HTTP 請求,將 URL 轉換為文件請求,並將存放的網站內容回傳給使用者。
Web server 工作流程
其實很簡單,就是使用者透過瀏覽器發送 HTTP 請求至 Web 伺服器後:
- 解析 URL:Web 伺服器會解析請求的 URL,確定使用者想要訪問的具體資源。
- 找到對應資源:找到相應的靜態文件(如 HTML 頁面、圖片等),或者將請求轉發至後端應用程式(如: python、go、php 等)進行處理。
- 回傳結果:將處理完的結果(網頁內容)回傳給使用者,顯示網站內容。
Web server 功能
-
靜態資源管理:
- Web 伺服器主要負責將靜態資源(如圖片、HTML 文件等)直接提供給用戶,他只能處理靜態的資源。遇到動態的內容會轉給後端的應用程式去處理。
-
正向代理:
- 正向代理是用於 client 的,它可以代替客戶端向其他伺服器發出請求,這時候對方的伺服器就不會知道是哪個 client 發送該請求的。它可以帶來:
-
保護隱私: 可以隱藏 client 的來源。
-
效能: 在 web server 可以用快取存取一些常用的資源,減少伺服器的負擔。
-
過濾內容: 像是學校、企業的網路,可以透過正向代理來限制存取一些內容(如 色情、暴力等內容)。
-
反向代理:
- 反向代理則是反過來,用來處理 client 的請求並將其轉發到內部伺服器。這通常用於負載平衡、SSL終端和提高安全性。
-
負載平衡:
- 可以將客戶端的請求分配到伺服器上,可以讓請求平均的分配到不同的伺服器上,減少過載的可能。
- 優點:
-
提高可用性:當某台伺服器故障時,反向代理可以自動將請求轉發到其他正常工作的伺服器,確保服務的持續可用性。
-
提升效能:通過分散流量,可以減少每台伺服器的負擔,也可以提高迴船的速度。
- e.g.:一個大型網站可能會有多台伺服器來處理請求,透過中間 web server 的反向代理可以分配到較少用的伺服器,提升每一台的執行效能。
-
提高安全性:
- 反向代理可以處理 SSL/TLS 加密的請求,將請求解密後轉發到伺服器。其實也就是將我們常見的 HTTPS 解密方式,放到 web server 去做。這裡就不詳述 https 是如何做傳輸和解密的,有興趣的人可以這篇文章看看,我覺得他講的很詳細。
- 優點:
-
釋放資源:後端應用程式的伺服器不需要處理加密和解密,這樣有更多資源做其他的事情。
-
集中管理:可以在 web server 中集中管理 SSL/TLS 的數位證書,簡化證書更新和維護。
- e.g.:企業可能會在反向代理伺服器上設定 SSL/TLS,所有進入的 HTTPS 請求都會先經過此伺服器,確保該請求是安全的,再轉發到內部伺服器。
今天聊完 web server 的作用,明天我們在繼續來探索 Nginx ~
Reference