lvs,nginx反向代理,虚拟主机

时间:2022-09-10 13:17:58

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反向代理,虚拟主机的更多相关文章

  1. nginx反向代理同一主机多个网站域名

    nginx反向代理同一ip多个域名,给header加上host就可以了 proxy_set_header   Host             $host; nginx.conf例子 upstream ...

  2. nginx 反向代理 apache 服务

    反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时 ...

  3. Nginx 反向代理 负载均衡 虚拟主机配置

    Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用Nginx反向搭理和负载均衡,了解Nginx常 ...

  4. Nginx 反向代理 负载均衡 虚拟主机

    Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用Nginx反向搭理和负载均衡,了解Nginx常 ...

  5. &lbrack;svc&rsqb;tomcat目录结构&sol;虚拟主机&sol;nginx反向代理cache配置

    tomcat目录文件 /usr/local/tomcat/bin/catalina.sh stop sleep 3 /usr/local/tomcat/bin/catalina.sh start to ...

  6. 【转】Nginx 反向代理 负载均衡 虚拟主机配置

    原文:http://www.cnblogs.com/itdragon/p/8059000.html Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代 ...

  7. 配置LANMP环境(7)-- 配置nginx反向代理,与配置apache虚拟主机

    一.配置nginx反向代理 1.修改配置文件 vim /etc/nginx/nginx.conf 在35行http下添加一下内容: include /data/nginx/vhosts/*.conf; ...

  8. 高级运维&lpar;二&rpar;:搭建Nginx服务器、用户认证、基于域名的虚拟主机、SSL虚拟主机、Nginx反向代理

    一.搭建Nginx服务器 目标: 在IP地址为192.168.4.5的主机上安装部署Nginx服务,并可以将Nginx服务器,要求编译时启用如下功能: 1> SSL加密功能 2> 设置Ng ...

  9. nginx 反向代理 和lvs负载均衡

    nginx反向代理:用户请求nginx代理服务器然后代理服务器将用户请求转为服务器再由nginx代理服务器将服务器的响应反应给用户. lvs负载均衡:用户请求nginx代理服务器然后代理服务器将用户请 ...

随机推荐

  1. phoenix 开发API系列 目录

    phoenix 开发API系列(一)创建简单的http api phoenix 开发API系列(二)phoenix 各类 api 实现方式 phoenix 开发API系列(三)phoenix api ...

  2. &lbrack;Android进阶&rsqb;学习AccessibilityService实现微信抢红包插件

    在你的手机更多设置或者高级设置中,我们会发现有个无障碍的功能,很多人不知道这个功能具体是干嘛的,其实这个功能是为了增强用户界面以帮助残障人士,或者可能暂时无法与设备充分交互的人们 它的具体实现是通过A ...

  3. Qt 二级菜单栏 中文无法输入问题

    问题描述:Qt5.3.1版本在建立主界面的二级菜单的时候,中文无法输入,而英文确是可以输入的.(首先我在网页上面搜索了一下,他们说是Qt的设计问题.) 解决方法: (1)粘贴复制,把中文写在其他的地方 ...

  4. 解决iptables和vsftpd设置的问题

    解决iptables和vsftpd设置的问题 博客分类: linux/centos/ubuntu 防火墙J#工作 解决iptables和vsftpd设置的问题 修改 vi /etc/sysconfig ...

  5. 聊聊 KVC 和 KVO 的高阶应用

    KVC, KVO 作为一种魔法贯穿日常Cocoa开发,笔者原先是准备写一篇对其的全面总结,可网络上对其的表面介绍已经够多了,除去基本层面的使用,笔者跟大家谈下平常在网络上没有提及的KVC, KVO进阶 ...

  6. Cmake 学习笔记

    编写CMakeLists.txt   #在当前目录新建一个build目录,然后cd build:cmake .. #这样的好处是,可以将cmake生成的内容,和源码文件分离   #设置编译结果发布路径 ...

  7. 如何使用门罗币远程节点remote node&quest;

    当使用门罗币钱包的时候,都需要启动monerod,用来同步门罗币区块. 但是因为区块体积目前已经超过40G了, 所以需要花费很多天时间才能把数据同步完. 这对于使用门罗币非常的不方便. 远程节点rem ...

  8. JS学习笔记Day15

    一.ES5及ES6 (一)严格模式 (二)bind/call/apply(改变上下文this指向,都是函数对象的方法) 1.bind:返回值是一个函数 2.call:返回值是一个对象 3.apply: ...

  9. Month format&colon;number to English abbre

    ``` DATA LV_MONTH TYPE FCKTX. CLEAR:LV_MONTH,lv_date. SELECT SINGLE KTX INTO LV_MONTH FROM T247 WHER ...

  10. 使用SQL Developer生成Oracle数据库的关系模型(ER图)

    客户要一张数据库的关系模型图,于是用SQL Developer来做. 一.SQL Developer版本 我在官网下载的最新版本(现在已经到了18.1,Oracle更新的太勤快): 2.如下图所示选择 ...