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連接狀況
刪除所有集群服務
-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 使配置文件生效
測試結果
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-->客戶機
實驗拓撲
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響應。
- 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查詢
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
lvs,nginx反向代理,虛擬主機