lvs,nginx反向代理,虛擬主機

LVS NAT

拓撲

client
       |
       |
       LVS
       |
       |
-------------------
|        |        |
RS1      RS2      RS3

地址規劃以下

機器名稱 ip配置 ip配置 備註信息
LVS 192.168.2.23 192.168.11.11 2塊網卡
RS1 192.168.11.12
RS2 192.168.11.13

檢查內核支持支持lvs

[root@lvs ~]# grep -i vs /boot/config-3.10.0-229.el7.x86_64 有IP_VS段說明支持

安裝ipvsadm工具

yum install -y ipvsadm

ipvsadm語法

ipvsadm :
  管理集羣服務
    添加:-A -t|u|f service-address [-s scheduler]
      -t:TCP協議
      -u:UDP協議
      -f:FWM,防火牆標記
    修改:-E
    刪除:-D -t|u|f service-address
    
    # ipvsadm -A -t 192.168.2.23:80 -s rr
  管理集羣服務中的RS
    添加:-a -t|u|f service-address -r server-address [-g|i|m] [-w weight]
    -t|u|f service-address:事先定義好的某集羣服務
    -r server-address:某RS的地址,在NAT模型中,可以使用IP:PORT實現映射
    [-g|i|m]:LVS類型
      -g:DR模型
      -i:TUN模型
      -m:NAT模型
    [-w weight]:定義服務器權重
    修改:-e
    刪除:-d -t|u|f service-address -r server-address
    
    # ipvsadm -a -t 192.168.2.23:80 -r 192.168.11.11 -m
    # ipvsadm -a -t 192.168.2.23:80 -r 192.168.11.13 -m
    
    查看:-L|l
      -n:數字格式顯示主機地址和端口
      --stats:統計數據
      --rate:速率
      --timeout:顯示tcp、tcpfin和udp的會話超時時長
      -c:顯示當前的ipvs鏈接情況
      
刪除全部集羣服務  html

        -C:清空ipvs規則
    保存規則  
      -S  
      # ipvsadm -S > /ath/to/somfefile
    載入此前的規則:  
      -R
      # ipvsadm -R < /path/from/somefile
      前端

RS服務器上安裝nginx

建立LVS

[root@lvs ~]# ipvsadm -A -t 192.168.2.23:80 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.2.23:80 -r 192.168.11.12 -m
[root@lvs ~]# ipvsadm -a -t 192.168.2.23:80 -r 192.168.11.13 -m

打開ip轉發機制

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

sysctl -p 使配置文件生效node

測試結果

root@node2:~# curl http://192.168.2.23/index.html
rs1
root@node2:~# curl http://192.168.2.23/index.html
rs2
root@node2:~# curl http://192.168.2.23/index.html
rs1
root@node2:~# curl http://192.168.2.23/index.html
rs2
root@node2:~# curl http://192.168.2.23/index.html
rs1
root@node2:~# curl http://192.168.2.23/index.html
rs2
root@node2:~# curl http://192.168.2.23/index.html
rs1
root@node2:~# curl http://192.168.2.23/index.html
rs2

      

LVS DR

LVS各模式的路由方式及區別:

NAT模式:客戶端-->分發路由器-->Real Server-->分發路由器-->客戶機
DR模式:客戶端-->分發路由器--Real Server-->客戶機
TUN模式:客戶機-->分發路由器--Real Server-->客戶機linux

實驗拓撲

client
       |
       |
      Router
       |
       |
------------------------------------
|                 |                   |
RS1               LVS                RS3
Rip:192.168.2.72  Rip:192.168.2.23  Rip:192.168.2.104
Vip:192.168.2.200  Vip:192.168.2.200  Vip:192.168.2.200

配置LVS

ip addr add 192.168.2.200/32 dev eno16777736:1


ipvsadm -A -t 192.168.2.200:80 -s rr
ipvsadm -a -t 192.168.2.200:80 -r 192.168.2.72 -g
ipvsadm -a -t 192.168.2.200:80 -r 192.168.2.104:80 -g

arp_ignore與arp_announce參數

arp響應限制arp_ignore

arp_ignore參數的做用是控制系統在收到外部的ARP請求, 是否要回返ARP響應。nginx

  • 0 - 默認值:響應任意網卡上接收到的對本機IP地址的ARP請求(包括迴環地址),而無論該目的IP是否在接收網卡上
  • 1 - 只響應目的IP地址爲接收網卡上的本地地址的ARP請求
  • 2 - 只響應目的IP地址爲接收網卡上的本地地址的ARP請求,而且ARP請求的源IP必須和接收網卡同網段
  • 3 - 若是ARP請求數據包所請求的IP地址對應的本地地址做用域(scope)爲主機(host),則不迴應ARP響應數據包,若是做用域爲全局(global)或鏈路(link),則迴應ARP響應數據包。
  • 4 - 7 保留未使用
  • 8 - 不迴應全部的ARP查詢web

    arp響應限制arp_announce

    arp_announce的任務是控制系統在對外發送ARP請求時,如何選擇ARP請求數據包的源IP地址。(好比系統準備經過網卡發送一個數據包a,這時數據包a的源IP和目的IP通常是知道的,而根據目的IP查詢路由表,發送網卡也是肯定的,故源MAC地址也是知道的,這時就差肯定目的MAC地址了。而想要獲取目的IP對應的目的MAC地址,就須要發送ARP請求。ARP請求的目的IP天然就是想要獲取其MAC地址的IP,而ARP請求的源IP是什麼呢?可能第一反應會覺得確定是數據包a的源IP地址,可是這個也不是通常的,ARP請求的源IP是能夠選擇的,控制這個地址如何選擇就是arp_announce的做用)
  • 0 - 默認容許使用任何網卡上的IP地址做爲ARP請求的源IP,一般就是使用數據包a的源IP
  • 1 - 儘可能避免使用不屬於該發送網卡子網的本地地址做爲發送ARP請求的源地址
  • 2 - IP數據包的源IP地址,選擇該發送網卡上最合適的本地地址做爲ARP請求的源IP地址緩存

    配置Real Server

ip addr add 192.168.2.200/32 dev lo:1

echo 1 > /proc/sys/net/ipv4/conf/eno16777736/arp_ignore 
echo 2 > /proc/sys/net/ipv4/conf/eno16777736/arp_announce

測試結果

root@node2:~# curl http://192.168.2.200/index.html
rs1
root@node2:~# curl http://192.168.2.200/index.html
rs2
root@node2:~# curl http://192.168.2.200/index.html
rs1
root@node2:~# curl http://192.168.2.200/index.html
rs2
root@node2:~# curl http://192.168.2.200/index.html
rs1
root@node2:~# curl http://192.168.2.200/index.html
rs2

Nginx反向代理

什麼是代理服務器

代理服務器,客戶機在發送請求時,不會直接發送給目的主機,而是先發送給代理服務器,代理服務器接受客戶請求以後,再向主機發出,並接收目的主機返回的數據,存放在代理服務器的磁盤中,再發送給客戶機。安全

爲何要使用代理服務器

  • 提升訪問速度
    因爲目標主機返回的數據會放在代理服務器的磁盤中,所以下一次客戶再訪問相同的站點數據時,會直接從代理服務器的磁盤中讀取,起到了緩存的做用,尤爲對於熱門站點能明顯提升請求速度
  • 防火牆做用
    因爲全部的客戶機請求都必須經過代理服務器訪問遠程站點,所以可在代理服務器上設限,過濾某些不安全信息
  • 經過代理服務器訪問不能訪問的目標站點
    互聯網上有施工開發的代理服務器,客戶機在訪問受限時,可經過不受限的代理服務器訪問目標站點服務器

    反向代理VS正向代理

  • 正向代理
    架設在客戶機與目標主機之間,只用於代理內部網絡對Internet的鏈接請求,客戶機必須指定代理服務器,並將原本要直接發送到Web服務器上的http請求發送到代理服務器中。
  • 反向代理
    架設在服務器前端,經過緩衝常常被請求的而面來緩解服務器的工做量,將客戶請求轉發給內部網絡上的目標服務器;並將服務器上獲得的結果返回給Internet上請求鏈接的客戶端,此時代理服務器與目標主機一塊兒對外表現爲一個服務器
  • 反向代理有哪些主要應用
    如今許多大型web網站都用到反向代理。除了能夠防止網網對內網服務器的惡意攻擊、緩存以減小服務器的壓力和訪問安全控制以外,還能夠進行負載均衡,將用戶請求分配給多個服務器。網絡

    配置Nginx爲反向代理服務器

    新建配置文件/etc/nginx/conf.d/proxy.conf

upstream websrvs {
        server 192.168.2.72:80;
        server 192.168.2.104:80;
}

server {
        listen 80 default_server;
        server_name  _;
        location / {
                proxy_pass http://websrvs;
                index index.html ;
        }
}

測試結果

root@node2:~# curl http://192.168.2.23/index.html
rs2
root@node2:~# curl http://192.168.2.23/index.html
rs1
root@node2:~# curl http://192.168.2.23/index.html
rs2
root@node2:~# curl http://192.168.2.23/index.html
rs1
root@node2:~# curl http://192.168.2.23/index.html
rs2
root@node2:~# curl http://192.168.2.23/index.html
rs2
root@node2:~# curl http://192.168.2.23/index.html
rs1
root@node2:~# curl http://192.168.2.23/index.html
rs2
root@node2:~# curl http://192.168.2.23/index.html
rs1
root@node2:~# curl http://192.168.2.23/index.html
rs2
root@node2:~# curl http://192.168.2.23/index.html

Nginx虛擬主機

基於IP的虛擬主機

若是一臺服務器有多個IP,可使用基於IP的虛擬主機配置,將不一樣的服務綁定在不一樣的IP上。

在服務器上配置3個IP地址

[root@lvs conf.d]# ip addr add 192.168.2.151/24 dev eno16777736:2
[root@lvs conf.d]# ip addr add 192.168.2.152/24 dev eno16777736:3
[root@lvs conf.d]# ip addr add 192.168.2.154/24 dev eno16777736:4

創建虛擬主機存放網頁的根目錄,將建立首頁文件index.html

[root@lvs conf.d]# mkdir -pv /data/www/15{1..3}
mkdir: 已建立目錄 "/data"
mkdir: 已建立目錄 "/data/www"
mkdir: 已建立目錄 "/data/www/151"
mkdir: 已建立目錄 "/data/www/152"
mkdir: 已建立目錄 "/data/www/153"
[root@lvs conf.d]# echo server151 > /data/www/151/index.html
[root@lvs conf.d]# echo server152 > /data/www/152/index.html
[root@lvs conf.d]# echo server153 > /data/www/153/index.html

編輯虛擬主機配置文件

/etc/nginx/conf.d/test.conf

server {
        listen 192.168.2.151:80;
        server_name www.test.com;

        location / {
                root /data/www/151;
                index index.html;
        }
}
server {
        listen 192.168.2.152:80;
        server_name www.test.com;

        location / {
                root /data/www/152;
                index index.html;
        }
}
server {
        listen 192.168.2.153:80;
        server_name www.test.com;

        location / {
                root /data/www/153;
                index index.html;
        }
}

測試結果

root@node2:~# curl http://192.168.2.153/index.html
server153
root@node2:~# curl http://192.168.2.152/index.html
server152
root@node2:~# curl http://192.168.2.151/index.html
server151

基於端口的虛擬主機

若是一臺服務器只有一個IP或須要經過不一樣的端口訪問不一樣的虛擬主機,可使用基於端口的虛擬主機配置

建立虛擬主機存放網頁的目錄,並建立首頁文件index.html

[root@lvs conf.d]# mkdir /data/www/{7..9}081
[root@lvs conf.d]# echo "port 7081" > /data/www/7081/index.html
[root@lvs conf.d]# echo "port 8081" > /data/www/8081/index.html
[root@lvs conf.d]# echo "port 9081" > /data/www/9081/index.html

編輯虛擬主機配置文件

/etc/nginx/conf.d/port.conf

server {
        listen 192.168.2.155:7081;
        server_name www.port.com;

        location / {
                root /data/www/7081;
                index index.html;
        }
}
server {
        listen 192.168.2.155:8081;
        server_name www.port.com;

        location / {
                root /data/www/8081;
                index index.html;
        }
}
server {
        listen 192.168.2.155:9081;
        server_name www.port.com;

        location / {
                root /data/www/9081;
                index index.html;
        }
}

測試結果:

root@node2:~# curl http://192.168.2.155:7081/index.html
port 7081
root@node2:~# curl http://192.168.2.155:8081/index.html
port 8081
root@node2:~# curl http://192.168.2.155:9081/index.html
port 9081

基於域名的虛擬主機

使用基於域名的虛擬主機是比較流行的方式,能夠在同一個IP上配置多個域名,而且都經過80端口訪問

創建虛擬主機存放網頁的目錄,並建立首面文件index.html

[root@lvs conf.d]# mkdir /data/www/www.oa.com
[root@lvs conf.d]# mkdir /data/www/www.bbs.com
[root@lvs conf.d]# mkdir /data/www/www.test.com
[root@lvs conf.d]# echo www.oa.com > /data/www/www.oa.com/index.html
[root@lvs conf.d]# echo www.bbs.com > /data/www/www.bbs.com/index.html
[root@lvs conf.d]# echo www.test.com > /data/www/www.test.com/index.html

創建虛擬主機配置文件

/etc/nginx/conf.d/vhost.conf

server {
        listen 192.168.2.155:80;
        server_name www.oa.com;
        location / {
                root /data/www/www.oa.com;
                index index.html;
        }

}
server {
        listen 192.168.2.155:80;
        server_name www.bbs.com;
        location / {
                root /data/www/www.bbs.com;
                index index.html;
        }

}
server {
        listen 192.168.2.155:80;
        server_name www.test.com;
        location / {
                root /data/www/www.test.com;
                index index.html;
        }

}

測試結果

root@node2:~# curl http://www.oa.com/index.html
www.oa.com
root@node2:~# curl http://www.bbs.com/index.html
www.bbs.com
root@node2:~# curl http://www.test.com/index.html
www.test.com

參考文檔: https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_021_lvsnat.html https://www.cnblogs.com/knowledgesea/p/6407018.html#undefined https://www.cnblogs.com/lipengxiang2009/p/7451050.html https://blog.csdn.net/Daybreak1209/article/details/51549031 https://blog.csdn.net/liupeifeng3514/article/details/79006998 https://blog.csdn.net/liupeifeng3514/article/details/79007035 https://blog.csdn.net/liupeifeng3514/article/details/79007051

相關文章
相關標籤/搜索