負載均衡(Load Balance),其含義就是指將負載(工作任務(wù))進行平衡、分攤到多個操作單元上進行運行澎怒,例如FTP服務(wù)器杭抠、Web服務(wù)器脸甘、企業(yè)核心應(yīng)用服務(wù)器和其它主要任務(wù)服務(wù)器等,從而協(xié)同完成工作任務(wù)偏灿。
例如丹诀,當我們網(wǎng)站的訪問量少的時候,單臺服務(wù)器足以處理客戶的請求翁垂。但隨著我們的客戶量铆遭,訪問量越來越多時,單臺服務(wù)器處理不過來就會造成響應(yīng)時長過長沿猜,用戶體驗差枚荣,甚至造成服務(wù)器宕機,此時我們就需要配置服務(wù)器集群啼肩,多臺服務(wù)器共同為用戶提供服務(wù)橄妆,減輕單臺服務(wù)器壓力;而且當其中一臺服務(wù)器出現(xiàn)問題宕機后祈坠,其他服務(wù)器依然可以正常接收處理用戶請求害碾,提高了系統(tǒng)的穩(wěn)定性,用戶體驗也更好赦拘。
本文介紹Nginx配置反向代理實現(xiàn)負載均衡的步驟
一蛮原、正向代理與反向代理
1. 正向代理
正向代理類似一個跳板機,代理訪問外部資源
比如我們國內(nèi)訪問谷歌另绩,直接訪問訪問不到儒陨,我們可以通過一個正向代理服務(wù)器,請求發(fā)到代理服笋籽,代理服務(wù)器能夠訪問谷歌蹦漠,這樣由代理去谷歌取到返回數(shù)據(jù),再返回給我們车海,這樣我們就能訪問谷歌了
正向代理的用途:
- 訪問原來無法訪問的資源笛园,如google
- 可以做緩存隘击,加速訪問資源
- 對客戶端訪問授權(quán),上網(wǎng)進行認證
- 代理可以記錄用戶訪問記錄(上網(wǎng)行為管理)研铆,對外隱藏用戶信息
2. 反向代理
反向代理(Reverse Proxy)實際運行方式是指以代理服務(wù)器來接受internet上的連接請求埋同,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請求連接的客戶端棵红,此時代理服務(wù)器對外就表現(xiàn)為一個服務(wù)器
反向代理的作用:
- 保證內(nèi)網(wǎng)的安全凶赁,阻止web攻擊,大型網(wǎng)站逆甜,通常將反向代理作為公網(wǎng)訪問地址虱肄,Web服務(wù)器是內(nèi)網(wǎng)
- 負載均衡,通過反向代理服務(wù)器來優(yōu)化網(wǎng)站的負載
二交煞、負載均衡
現(xiàn)在我們搭建一個由兩臺服務(wù)器組成的集群為用戶提供服務(wù)咏窿。
第一臺服務(wù)器是:192.168.204.133
第二臺服務(wù)器是:192.168.204.134
那么我們可以這樣配置:所有的用戶通過域名解析訪問到第一臺服務(wù)器:192.168.204.133的80端口,80端口由Nginx監(jiān)聽素征,接收到用戶請求后集嵌,按照一定的策略(平均,權(quán)重御毅,ip_hash等等)分發(fā)到真正處理請求的服務(wù)器中根欧,我們設(shè)置真正處理請求的服務(wù)器是192.168.204.133的8080端口 和 192.168.204.134的80端口。這樣亚享,假如我們有100個請求同時請求我們的網(wǎng)站咽块,那么可以把50個請求轉(zhuǎn)發(fā)到192.168.204.133,另外50個請求轉(zhuǎn)發(fā)到192.168.204.134欺税,從而達到負載均衡的效果侈沪,減輕單機處理所有請求的壓力。
三晚凿、負載均衡配置
注意點:
1亭罪,新裝的Linux可能只允許訪問80端口,其他端口不允許訪問歼秽,此時需要配置防火墻
2应役,nginx+php環(huán)境訪問顯示access denied 解決辦法:將php.ini中cgi.fix_pathinfo從0改為1。
3燥筷,fastcgi_pass有兩種配置箩祥,unix:/tmp/php-cgi.sock 和 127.0.0.1:9000; 默認是前者
1,第一臺服務(wù)器192.168.204.133的Nginx配置:
其中192.168.204.133:80提供代理服務(wù)肆氓,負責(zé)分發(fā)用戶發(fā)送的請求到集群節(jié)點袍祖,192.168.204.133:8080提供真實服務(wù),為一個集群節(jié)點
#nginx進程數(shù)谢揪,建議設(shè)置為等于CPU總核心數(shù)蕉陋。該配置的數(shù)值越大捐凭,Nginx的并發(fā)能力就越強
worker_processes auto;
worker_cpu_affinity auto;
#全局錯誤日志定義類型,[ debug | info | notice | warn | error | crit ]
error_log /home/wwwlogs/nginx_error.log crit;
pid /usr/local/nginx/logs/nginx.pid; #進程pid文件
worker_rlimit_nofile 51200; #指定進程可以打開的最大描述符:數(shù)目
events
{
use epoll;
worker_connections 51200;#數(shù)值越大凳鬓,并發(fā)能力越強
multi_accept off;
accept_mutex off;
}
http
{
include mime.types; #引入一個外部文件: ./mine.types 該文件放著大量的媒體類型
default_type application/octet-stream;
# 負載服務(wù)器節(jié)點
upstream my-server
{
server 192.168.204.133:8080;
server 192.168.204.134:80;
}
# 代理服務(wù)器配置:
server
{
listen 80; #監(jiān)聽的端口
server_name _; #訪問域名
location /
{
proxy_pass http://my-server/; #配置想要分發(fā)到的節(jié)點
}
}
# 服務(wù)器節(jié)點192.168.204.133:8080 配置:
server
{
listen 8080; #監(jiān)聽的端口
server_name _; #訪問域名
index index.html index.php; #默認訪問的文件
root /home/wwwroot/default/balance; #網(wǎng)站根目錄
location /
{
index index.html index.php;
}
#命中php文件茁肠,交由php-cgi處理,非PHP應(yīng)用忽略以下配置
location ~ \.php(.*)$
{
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
}
}
2缩举,第二臺服務(wù)器192.168.204.134的Nginx配置:
worker_processes auto;
worker_cpu_affinity auto;
error_log /home/wwwlogs/nginx_error.log crit;
pid /usr/local/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;
events
{
use epoll;
worker_connections 51200;
multi_accept off;
accept_mutex off;
}
http
{
include mime.types;
default_type application/octet-stream;
# 服務(wù)器節(jié)點192.168.204.134 配置:
server
{
listen 80; #監(jiān)聽的端口
server_name _; #訪問域名
index index.html index.php; #默認訪問的文件
root /home/wwwroot/default; #網(wǎng)站根目錄
location /
{
index index.html index.php;
}
#命中php文件垦梆,交由php-cgi處理,非PHP應(yīng)用忽略以下配置
location ~ \.php(.*)$
{
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
}
#include vhost/*.conf;
}
然后我們打開兩個瀏覽器窗口模擬兩個請求蚁孔,共同訪問 192.168.204.133 奶赔,可以看惋嚎,一個請求分發(fā)到了192.168.204.133:8080杠氢,一個請求分發(fā)到了192.168.204.134:80,此時另伍,負載均衡配置完成鼻百。