Nginx使用篇:實現負載均衡、限流與動靜分離

kaizi1992發表於2024-09-16

Nginx實用篇:實現負載均衡、限流與動靜分離

| 原創作者/編輯:凱哥Java

| 分類:Nginx學習系列教程

image.png

nginx的logo

Nginx 作為一款高效能的 HTTP 伺服器及反向代理解決方案,在網際網路架構中扮演著至關重要的角色。它不僅支援負載均衡、流量控制等功能,還能夠有效地實現動靜分離,以此來增強系統的穩定性和響應速度。本文將詳細介紹這些功能的應用場景及具體配置方法。


一、負載均衡

Nginx 透過反向代理機制實現負載均衡,將前端使用者的請求智慧地分散到多個後端伺服器上,從而提升整體的服務能力和系統的高可用性。

配置示例:

在 http 區塊內定義 upstream 伺服器池,指定多個後端伺服器地址:

http {

upstream backend_servers {

server backend1.example.com;

server backend2.example.com;

server backend3.example.com;

}

server {

listen 80;

location / {

proxy_pass http://backend_servers;

}

}

}


負載均衡演算法:

輪詢(Round Robin):預設情況下,請求會按照順序輪流傳送到各個伺服器。

權重(Weight):允許為每個伺服器分配不同的權重,權重越高,接收請求的機率越大。

IP 雜湊(IP Hash):根據客戶端 IP 地址進行雜湊運算,使得來自同一客戶端的請求始終指向相同的後端伺服器。

最少連線(Least Connections):選擇當前連線數最少的伺服器來處理新的請求。

示例配置如下:

upstream backend_servers {

server backend1.example.com weight=3;

server backend2.example.com;

server backend3.example.com;

}

upstream backend_servers {

ip_hash;

server backend1.example.com;

server backend2.example.com;

server backend3.example.com;

}

upstream backend_servers {

least_conn;

server backend1.example.com;

server backend2.example.com;

server backend3.example.com;

}


二、流量控制(限流)

Nginx 提供了強大的限流功能,透過 ngx_http_limit_req_module 模組來限制單位時間內客戶端的請求數量,防止伺服器因過多請求而過載。

配置示例:

首先在 http 區塊內宣告一個限流區域,並指定其共享記憶體大小及最大請求速率:

http {

limit_req_zone $binary_remote_addr zone=traffic_control:10m rate=10r/s;

server {

listen 80;

location / {

limit_req zone=traffic_control burst=20 nodelay;

proxy_pass http://backend_servers;

}

}

}

引數解析:

limit_req_zone定義了一個名為 traffic_control 的限流區域,共享記憶體大小為 10MB,最大請求速率為每秒 10 個請求。

limit_req 應用了上述區域,burst=20 允許短時間內的請求爆發,nodelay 表示超出限速的請求立即返回錯誤。


三、動靜分離

動靜分離是透過區分動態與靜態請求,分別處理以達到提升網站效能的目的。對於靜態資源(如圖片、樣式表、指令碼檔案),Nginx 可以直接處理;而對於動態請求,則由 Nginx 代理到後端應用伺服器進行處理。

配置示例:

server {

listen 80;

location / {

proxy_pass http://backend_servers;

}

location ~* \.(jpg|jpeg|png|gif|css|js|ico|html)$ {

root /var/www/static;

expires 30d;

}

}

引數解析:

location / 匹配所有路徑,將請求代理給後端伺服器。

location ~* \.(jpg|jpeg|png|gif|css|js|ico|html)$ 匹配特定型別的靜態檔案,並直接由 Nginx 返回。root指定靜態檔案存放的目錄,expires 設定客戶端快取時間為 30 天。


結語

Nginx 以其靈活多變的配置方式和高效的執行能力,成為現代 Web 架構不可或缺的一部分。無論是透過反向代理實現的負載均衡,還是限流機制以及動靜分離策略,都能極大地改善服務質量和使用者體驗。熟練掌握這些配置技巧,可以幫助我們更好地發揮 Nginx 的潛力,進一步提升 Web 應用的整體效能。

相關文章