天天看點

LB叢集之nginx

這篇文章講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,如需轉載請自行聯系原作者

繼續閱讀