iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0

工作時常會使用到 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


上一篇
Day-8 | SOLID 設計原則該如何使用
下一篇
Day-10 | 簡單上手 Nginx (1)
系列文
埋藏在後端工程下的地雷與寶藏30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言