Nginx反向代理和負(fù)載均衡部署指南
nginx不單可以作為強(qiáng)大的web服務(wù)器,也可以作為一個(gè)反向代理服務(wù)器,而且nginx還可以按照調(diào)度規(guī)則實(shí)現(xiàn)動(dòng)態(tài)、靜態(tài)頁面的分離,可以按照輪詢、ip哈希、URL哈希、權(quán)重等多種方式對后端服務(wù)器做負(fù)載均衡,同時(shí)還支持后端服務(wù)器的健康檢查。
如果只有一臺(tái)服務(wù)器時(shí),這個(gè)服務(wù)器掛了,那么對于網(wǎng)站來說是個(gè)災(zāi)難.因此,這時(shí)候的負(fù)載均衡就會(huì)大顯身手了,它會(huì)自動(dòng)剔除掛掉的服務(wù)器.
Nginx負(fù)載均衡一些基礎(chǔ)知識(shí):
nginx 的 upstream目前支持 4 種方式的分配
1)、輪詢(默認(rèn))
每個(gè)請求按時(shí)間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉,能自動(dòng)剔除。
2)、weight
指定輪詢幾率,weight和訪問比率成正比,用于后端服務(wù)器性能不均的情況。
2)、ip_hash
每個(gè)請求按訪問ip的hash結(jié)果分配,這樣每個(gè)訪客固定訪問一個(gè)后端服務(wù)器,可以解決session的問題。
3)、fair(第三方)
按后端服務(wù)器的響應(yīng)時(shí)間來分配請求,響應(yīng)時(shí)間短的優(yōu)先分配。
4)、url_hash(第三方)
以下是具體使用步驟:
1. 安裝
1) 從Nginx官網(wǎng)下載頁面(http://nginx.org/en/download.html)下載Nginx***版本(目前是1.5.13版本)安裝包;
2) 解壓后復(fù)制到部署目錄。
2. 啟動(dòng)和停止Nginx
Nginx目前只支持命令行操作,操作前先進(jìn)入Dos命令環(huán)境,并進(jìn)入Nginx部署目錄。
1) 啟動(dòng)Nginx:start nginx
2) 停止Nginx:nginx -s stop
3) 修改配置后重啟:nginx -s reload
這三個(gè)命令可分別做成bat文件,放在部署目錄下,方便后續(xù)操作。
start nginx.bat文件內(nèi)容:start nginx
stop nginx.bat文件內(nèi)容:nginx -s stop
reload nginx.bat文件內(nèi)容:nginx -s reload
3. 反向代理配置
修改部署目錄下conf子目錄的nginx.conf文件(如nginx-1.5.13\conf\nginx.conf)內(nèi)容,可調(diào)整相關(guān)配置。
反向代理配置示例:
location / {
#設(shè)置主機(jī)頭和客戶端真實(shí)地址,以便服務(wù)器獲取客戶端真實(shí)IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#禁用緩存
proxy_buffering off;
#設(shè)置反向代理的地址
proxy_pass http://192.168.1.1;
}
代理地址根據(jù)實(shí)際情況修改。
4. 負(fù)載均衡配置
nginx 的 upstream默認(rèn)是以輪詢的方式實(shí)現(xiàn)負(fù)載均衡,這種方式中,每個(gè)請求按時(shí)間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉,能自動(dòng)剔除。
另外一種方式是ip_hash:每個(gè)請求按訪問ip的hash結(jié)果分配,這樣每個(gè)訪客固定訪問一個(gè)后端服務(wù)器,可以解決session的問題。
負(fù)載均衡配置示例:
upstream backend {
#ip_hash;
server 192.168.1.251;
server 192.168.1.252;
server 192.168.1.247;
}
server {
listen 80;
server_name trffweb;
location / {
#反向代理的地址
proxy_pass http://backend;
}
}
Upstream命名和服務(wù)器地址根據(jù)實(shí)際情況修改。
#p#
5. 完整配置示例
nginx.conf:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream backend {
#ip_hash;
server 192.168.1.251;
server 192.168.1.252;
server 192.168.1.247;
}
server {
listen 80;
server_name 2;
location / {
#設(shè)置主機(jī)頭和客戶端真實(shí)地址,以便服務(wù)器獲取客戶端真實(shí)IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#禁用緩存
proxy_buffering off;
#反向代理的地址
proxy_pass http://backend;
}
}
}