在LNMP(Linux, Nginx, MySQL, PHP)架構中,Nginx可以通過多種方式實現負載均衡。以下是幾種常見的方法:
輪詢是最簡單的負載均衡算法,Nginx會按順序將請求分發到后端服務器。
http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
加權輪詢允許為每個后端服務器分配不同的權重,權重高的服務器會處理更多的請求。
http {
upstream backend {
server backend1.example.com weight=3;
server backend2.example.com weight=2;
server backend3.example.com weight=1;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
IP哈希根據客戶端的IP地址進行哈希運算,確保來自同一客戶端的請求總是被分發到同一臺后端服務器。
http {
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
最少連接算法將請求分發到當前連接數最少的后端服務器。
http {
upstream backend {
least_conn;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
URL哈希根據請求的URL進行哈希運算,確保相同的URL總是被分發到同一臺后端服務器。
http {
upstream backend {
hash $request_uri consistent;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
Nginx Plus(商業版)支持主動健康檢查,可以自動檢測后端服務器的健康狀態,并在服務器不可用時將其從負載均衡池中移除。
http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
health_check;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
Nginx還有一些第三方模塊,如ngx_http_upstream_module
的擴展模塊,可以實現更復雜的負載均衡策略。
以下是一個綜合了多種負載均衡策略的配置示例:
http {
upstream backend {
server backend1.example.com weight=3;
server backend2.example.com weight=2;
server backend3.example.com weight=1;
ip_hash;
least_conn;
hash $request_uri consistent;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
通過這些配置,Nginx可以有效地實現負載均衡,提高系統的可用性和性能。