這篇文章講nginx的負載均衡,它實際上和nginx的代理是同一個功能,隻是把之前代理一台機器改為代理多台機器而已。nginx 的負載均衡和LVS相比,nginx屬于更進階的應用層,不牽扯到 IP 和核心的改動,它隻是單純地把使用者的請求轉發到後面的機器上。這就意味着,後端的rs不需要配置公網 IP。
一、nginx代理實作叢集
1、準備工作
準備三台機器
nginx 分發器(一個公網 ip192.168.1.109 和一個内網 ip192.168.0.109)。
rs1 隻有内網 ip(192.168.0.112)
rs2 隻有内網 ip(192.168.0.113)
同時,三台機器都要安裝nginx,并開啟。
# yum install -y nginx //若沒有,可先安裝epel擴充源:epel-release
# /etc/init.d/nginx start
2、配置
在 nginx 分發器上編輯配置檔案
[root@tpp ~]# vim /usr/local/nginx/conf/vhosts/lb.conf //加入如下内容
upstream test {
ip_hash;
server 192.168.0.112;
server 192.168.0.113;
}
server {
listen 80;
server_name www.tpp.com;
location / {
proxy_pass http://test/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
重新開機nginx
[root@tpp ~]# /etc/init.d/nginx restart
在rs1和rs2上配置
我們修改下nginx的預設頁面
rs1上
echo "rs1 nginx" > /usr/share/nginx/html/index.html
rs2上
echo "rs2 nginx" > /usr/share/nginx/html/index.html
3、測試
首先rs1和rs2都要關閉防火牆
# iptables -F
然後在nginx分發器上執行測試指令
[root@tpp ~]# curl -xlocalhost:80 www.tpp.com
rs1 nginx
rs2 nginx
二、根據通路的目錄來區分後端的web
需求:當請求的目錄是 /aaa/ 則把請求發送到機器rs1,除了目錄/aaa/外,其他的請求發送到機器rs2.
在分發器上配置
upstream testa {
server 192.168.0.112;
}
upstream testb {
server 192.168.0.113;
server {
listen 80;
server_name www.tpp.com;
location /aaa/{
proxy_pass http://testa/aaa/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /{
proxy_pass http://testb/;
注意:
1)以上配置檔案中的 test、testa 以及 testb 都是自定義的,随便寫。
2)proxy_pass http://testa/aaa/這裡必須要加這個目錄,不然就通路到根目錄了。
3)根據通路的目錄來區分後端的web,這個LVS是做不到的。
本文轉自 M四月天 51CTO部落格,原文連結:http://blog.51cto.com/msiyuetian/1701337,如需轉載請自行聯系原作者