lvs的nat和dr实现,nginx反向代理,虚拟主机

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lvs的nat和dr实现,nginx反向代理,虚拟主机相关的知识,希望对你有一定的参考价值。

1.LVS的基本用法

1.管理工具:ipvsadm
2.基本概念

VS:Virtual Server,调度器 
RS:Real Server(lvs), upstream server(nginx)    backend server(haproxy)  实际服务器
CIP:Client IP  客户端IP
VIP: Virtual serve IP VS外网的IP  
DIP: Director IP  VS内网的IP 
RIP: Real server IP   实际服务器IP

3.转发模式:

lvs-nat:修改请求报文的目标IP,多目标IP的DNAT 
lvs-dr:操纵封装新的MAC地址   (应用更广泛)
lvs-tun:在原请求IP报文之外新加一个IP首部  
lvs-fullnat:修改请求报文的源和目标IP

4.指定VS服务器规则命令(指定VIP和算法)

 ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags] 
 -A 增加
 -E  修改
 ipvsadm -D -t|u|f service-address 删除 

 -t: TCP协议的端口,VIP:TCP_PORT    -t 192.168.0.119:80
-u: UDP协议的端口,VIP:UDP_PORT   
-f:firewall MARK,标记,一个数字
 [-s scheduler]:指定集群的调度算法,默认为wlc 

5.指定RS服务器规则命令(指定RIP和lvs类型)

ipvsadm -a|e -t|u|f service-address(VIP) -r server-address(RIP) [-g|i|m] [-w weight]    
-a 增加
-e  修改
ipvsadm -d -t|u|f service-address -r serveraddress   删除
指定lvs使用类型
-g: gateway, dr类型,默认   -i: ipip, tun类型   -m: masquerade, nat类型   
-w weight:权重

6.其他用法

ipvsadm –C  清空 
ipvsadm –R  重载 
ipvsadm -S [-n]  保存 
ipvsadm -Z [-t|u|f service-address] 清空计数器
ipvsadm -L|l [options]  查看规则  
ipvsadm -Ln 查看规则(常用)
--numeric, -n:以数字形式输出地址和端口号    
--exact:扩展信息,精确值     
--connection,-c:当前IPVS连接输出   
--stats:统计信息   
--rate :输出速率信息 

7.保存规则3种方法(-n禁止解析成主机名)

1.ipvsadm-save -n > /PATH/TO/IPVSADM_FILE    (建议保存至/etc/sysconfig/ipvsadm)
2.ipvsadm -Sn > /PATH/TO/IPVSADM_FILE  
3.systemctl stop ipvsadm.service  (这也可以保存)

8.加载规则3种方式

1.ipvsadm-restore < /PATH/FROM/IPVSADM_FILE  
2.ipvsadm -R < /PATH/FROM/IPVSADM_FILE  
3.systemctl restart ipvsadm.service

9.开机启动:


systemctl enabled ipvsadm.service 

10.打标签 (-f)
借助于防火墙标记来分类报文,而后基于标记定义集群服务; 可将多个不同的应用使用同一个集群服务进行调度
例如http和https 共用一个集群 ,使得80 和443 端口共用一个集群

在Director主机(LVS主机)打标记:

iptables -t mangle -A PREROUTING -d $vip -p $proto –m multiport --dports $port1,$port2,… -j MARK --set-mark NUMBER (写一个数字)

在Director主机基于标记定义集群服务:

ipvsadm -A -f NUMBER [options]

iptables -t mangle -A PREROUTING -d 10.0.0.100 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 10 
ipvsadm -A -f 10 -s rr # -f 10就是引用这个标签
ipvsadm -a -f 10 -r 192.168.30.17 -g
ipvsadm -a -f 10 -r 192.168.30.27 -g

11.持久连接(-p)
session 绑定:对共享同一组RS的多个集群服务,需要统一进行绑 定,lvs sh算法无法实现
持久连接( lvs persistence )模板:实现无论使用任何调度算法, 在一段时间内(默认360s ),能够实现将来自同一个地址的请求始 终发往同一个RS

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]   不加时间默认6分钟,单位秒

如 ipvsadm -A -t 192.168.0.1 -s rr -p 720

12.指定算法(-s)
静态方法:不管RS工作情况调度

1、RR:roundrobin,轮询   (循环调度)

2、WRR:Weighted RR,加权轮询 (按比列循环调度) 

3、SH:Source Hashing,实现session sticky,源IP地址 hash;将来自于同一个IP地址的请求始终发往第一次挑中的 RS,从而实现会话绑定   (保持会话调度) 

4、DH:Destination Hashing;目标地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商  (正向代理调度服务器到缓存服务器使用,利用目标地址固定调度到同一缓存服务器中,提高缓存服务器利用率) 

动态方法:考虑RS工作情况调度

1、LC: 适用于长连接应用  公式:Overhead=activeconns*256+inactiveconns 
2、WLC:默认调度方法(加入权重)  公式:Overhead=(activeconns*256+inactiveconns)/weight 
3、SED:初始连接高权重优先(加入初始权重判断)  公式:Overhead=(activeconns+1)*256/weight ,
4、NQ:第一轮均匀分配,后续SED 
5、LBLC:Locality-Based LC,动态的DH算法,使用场景: 根据负载状态实现正向代理 
6、LBLCR:带复制功能的LBLC 解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS,也是实现正向代理中使用,减轻某个缓存服务器压力

2.LVS实现NAT

1.搭建4台主机

客户端:192.168.0.109
LVS调度器:VIP:192.168.0.112  DIP:192.168.1.112
RS服务器两台 192.168.1.113  192.168.1.114

2.搭建网络拓扑结构
lvs服务器,搭建两个网卡,设定VIP和DIP,并且开启路由转发功能

[[email protected] ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
[[email protected] ~]# sysctl -p
net.ipv4.ip_forward = 1

rs服务器,由于NAT模式中回应包要回到LVS服务器,所以RS服务器网关要指向DIP

3.在rs服务器搭建http服务器,并搭建主页

[[email protected] ~]#echo 192.168.1.113 > /var/www/html/index.html
[[email protected] ~]#echo 192.168.1.114 > /var/www/html/index.htm

启动httpd服务

4.在LVS服务器安装ipvsadm设定规则

[[email protected] ~]# yum install ipvsadm
[[email protected] ~]# ipvsadm -A -t 192.168.0.112:80 -s wrr #指定加权轮询 算法
[[email protected] ~]# ipvsadm -a -t 192.168.0.112:80 -r 192.168.1.113 -m -w 2  #-m指定NAT -w 指定权重
[[email protected] ~]# ipvsadm -a -t 192.168.0.112:80 -r 192.168.1.114 -m 
[[email protected] ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.112:80 wrr
  -> 192.168.1.113:80             Masq    2      0          0         
  -> 192.168.1.114:80             Masq    1      0          0  

5.在客服端测试

[[email protected] ~]#curl 192.168.0.112
192.168.1.114
[[email protected] ~]#curl 192.168.0.112
192.168.1.113
[[email protected] ~]#curl 192.168.0.112
192.168.1.113
[[email protected] ~]#curl 192.168.0.112
192.168.1.114
[[email protected] ~]#curl 192.168.0.112
192.168.1.113
[[email protected] ~]#curl 192.168.0.112
192.168.1.113

3.LVS实现DR模式

1.搭建5台主机

客户端:192.168.0.109
前端路由器:192.168.0.115(客户端网关) 192.168.2.115(lvs服务器vip网关)  192.168.1.115(rs服务器网关)(192.168.2.115和192.168.1.115绑定在一个网卡中)
LVS调度器:VIP:192.168.2.112  DIP:192.168.1.112
RS服务器两台 192.168.1.113  192.168.1.114

注意:RS和Director要在同一个物理网络,因此整个内网在(物理上)是一个网段,因此客户端与路由器用桥接vmnet1,而路由器另一网卡与lvs服务器、rs服务器在仅主机模式中一个网段vmnet2。

2.搭建网络拓扑
客户端网关指向192.168.0.115
路由器启动路由转发

[[email protected] ~]#echo 1 > /proc/sys/net/ipv4/ip_forward

rs服务器网关指向192.168.1.115

3.RS服务器禁用arp应答和通告

[[email protected] ~]#vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2

[[email protected] ~]#sysctl -p

4.RS服务器在lo网卡中绑定VIP 192.168.2.112

[[email protected] ~]#ip a a 192.168.2.112/32 dev lo

5.LVS服务器加入规则

[[email protected] ~]# ipvsadm -A -t 192.168.2.112:80 -s wrr   指定lvs的VIP和算法
[[email protected] ~]# ipvsadm -a -t 192.168.2.112:80 -r 192.168.1.113  -w 2  # -w 指定权重
[[email protected] ~]# ipvsadm -a -t 192.168.2.112:80 -r 192.168.1.114 
[[email protected] ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.2.112:80 wrr
  -> 192.168.1.113:80             Route    2      0          0         
  -> 192.168.1.114:80             Route   1      0          0  

6.测试网页

[[email protected] ~]#curl 192.168.2.112
192.168.1.114
[[email protected] ~]#curl 192.168.2.112
192.168.1.113
[[email protected] ~]#curl 192.168.2.112
192.168.1.113
[[email protected] ~]#curl 192.168.2.112
192.168.1.114
[[email protected] ~]#curl 192.168.2.112
192.168.1.113
[[email protected] ~]#curl 192.168.2.112
192.168.1.113

4.nginx实现虚拟主机

1.安装nginx服务
2.建立自己独立配置文件vhost.conf,定义三个虚拟主机

[[email protected] ~]#vim /etc/nginx/conf.d/vhost.conf
server {
        server_name www.a.com;   #定义主机www.a.com
        root /data/nginx/a;
        }

server {
        server_name www.b.com;

  location / {
                alias /data/nginx/b/;#注意要以 / 结尾
                }
        }
server {
        listen 192.168.0.109:8080;#定义8080端口为一个主机
        root /data/nginx/c;
        location /image/ {
                root /data/nginx/;
                }
        }

3.启动nginx服务,查看80端口和8080端口是否打开

[[email protected] ~]#nginx
[[email protected] ~]#ss -ntl
State      Recv-Q Send-Q           Local Address:Port                          Peer Address:Port              
LISTEN     0      128                          *:111                                      *:*                  
LISTEN     0      128              192.168.0.109:8080                                     *:*                  
LISTEN     0      128                          *:80                                       *:*                  
LISTEN     0      5                192.168.122.1:53                                       *:*                  
LISTEN     0      128                          *:22                                       *:*                  
LISTEN     0      128                  127.0.0.1:631                                      *:*                  
LISTEN     0      100                  127.0.0.1:25                                       *:*                  
LISTEN     0      128                          *:43550                                    *:*                  
LISTEN     0      128                         :::111                                     :::*                  
LISTEN     0      128                         :::80                                      :::*                  
LISTEN     0      128                         :::22                                      :::*                  
LISTEN     0      128                        ::1:631                                     :::*                  
LISTEN     0      100                        ::1:25                                      :::*                  
LISTEN     0      128                         :::46052                                   :::* 

4.创建目录和网页

[[email protected] ~]#mkdir -pv /data/nginx/{a,b,c,image}
mkdir: created directory ‘/data/nginx’
mkdir: created directory ‘/data/nginx/a’
mkdir: created directory ‘/data/nginx/b’
mkdir: created directory ‘/data/nginx/c’
mkdir: created directory ‘/data/nginx/image’
[[email protected] ~]#echo www.a.com > /data/nginx/a/index.html
[[email protected] ~]#echo www.b.com > /data/nginx/b/index.html 
[[email protected] ~]#echo 8080 > /data/nginx/c/index.html          
[[email protected] ~]#echo images > /data/nginx/image/index.html
[[email protected] ~]#chown -R nginx:nginx /data/nginx/
[[email protected] ~]#ll /data/nginx/
total 0
drwxr-xr-x 2 nginx nginx 24 Mar  5 17:17 a
drwxr-xr-x 2 nginx nginx 24 Mar  5 17:17 b
drwxr-xr-x 2 nginx nginx 24 Mar  5 17:18 c
drwxr-xr-x 2 nginx nginx 24 Mar  5 17:18 image

5.客户端加入名字解析

[[email protected] ~]# vim /etc/hosts
192.168.0.109 www.a.com www.b.com
测试
[[email protected] ~]# curl www.a.com
www.a.com
[[email protected] ~]# curl www.b.com
www.b.com
[[email protected] ~]# curl 192.168.0.109:8080
8080
[[email protected] ~]# curl 192.168.0.109:8080/image/
images

6.定义虚拟主机选项

server {   
    listen address[:PORT]|PORT;    定义监听地址 端口   
    server_name SERVER_NAME;    定义服务名字
    root /PATH/TO/DOCUMENT_ROOT;    定义主页路径
 } 

1.listen address[:PORT]|PORT; 定义监听地址 端口

加入default_server 变成默认主机
ssl  限制仅能够通过ssl连接提供服务  
backlog=number 超过并发连接数后,新请求进入后援队列的长度  (等待队列)
rcvbuf=size 接收缓冲区大小  
sndbuf=size 发送缓冲区大小 

2.server_name name ...;

虚拟主机的主机名称后可跟多个由空白字符分隔的字符串 ?
支持*通配任意长度的任意字符  
server_name *.magedu.com  www.magedu.* ?
支持~起始的字符做正则表达式模式匹配,性能原因慎用    
server_name  ~^www\d+\.magedu\.com$  \d 表示 [0-9] ?
匹配优先级机制从高到低: 
(1) 首先是字符串精确匹配 如:www.magedu.com 
(2) 左侧*通配符  如:*.magedu.com 
(3) 右侧*通配符  如:www.magedu.* 
(4) 正则表达式   如: ~^.*\.magedu\.com$ 
(5) default_server

3.tcp_nodelay on | off;

在keepalived模式下的连接是否启用TCP_NODELAY选项  当为off时,延迟发送,合并多个请求后再发送  
默认On时,不延迟发送  
可用于:http, server, location 

4.sendfile on | off;

是否启用sendfile功能,在内核中封装报文直接发送  默认Off 
可以开启

5.server_tokens on | off | build | string

是否在响应报文的Server首部显示nginx版本  建议关闭  
在http{...}中

6.root 设置web资源的路径映射;用于指明请求的URL所对应的文档 的目录路径,
用于http, server, location, if in location

7.location [ = | ~ | ~* | ^~ ] uri { ... }

location @name { ... } 
在一个server中location配置段可存在多个,用于实现从uri到 文件系统的路径映射;
ngnix会根据用户请求的URI来检查定义的所有 location,并找出一个最佳匹配,而后应用其配置  

示例:

server {
        ...   
        server_name  www.magedu.com;   
        location /images/ {    (单独设定该主机/images访问路径的实际目录)
                    root  /data/imgs/;    
                 } 
         }  

 http://www.magedu.com/images/logo.jpg    --> /data/imgs/images/logo.jpg   

匹配模式

=:对URI做精确匹配;   
location = /index.html {   
        ...  
     }  
http://www.magedu.com/index.html 匹配  http://www.magedu.com/test.html 不匹配 

^~:对URI的最左边部分做匹配检查,不区分字符大小写 
~:对URI做正则表达式模式匹配,区分字符大小写 
~*:对URI做正则表达式模式匹配,不区分字符大小写 
不带符号:匹配起始于此uri的所有的uri 
匹配优先级从高到低:  =, ^~, ~/~*, 不带符号 

8.alias path;

路径别名,文档映射的另一种机制;仅能用于location上下文 
  alias 和root区别
 示例: http://www.magedu.com/bbs/index.html
location /bbs/ {  
        alias /web/forum/; 
        }      --> /web/forum/index.html     (用/web/forum/替换/bbs/)
location /bbs/ {  
        root /web/forum/;        
         }      --> /web/forum/bbs/index.html  (用/web/forum/替换/)
注意:location中使用root指令和alias指令的意义不同  
(a) root,给定的路径对应于location中的/uri/左侧的/  
(b) alias,给定的路径对应于location中的/uri/右侧的/ 

9.index file ...; 指定默认网页文件

10.error_page code ... [=[response]] uri;

定义错误页,以指定的响应状态码进行响应  
可用位置:http, server, location, if in location  
error_page  404  /404.html  
error_page  404  =200  /404.html  重定向到响应码200   防止浏览器劫持自己错误页面

11.try_files file ... uri;

try_files file ... =code;
按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线 表示为文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重 定向到最后一个参数,

找不到的文件会显示默认文件


location /images/ {      
    try_files $uri /images/default.gif;      在images找不到,显示default.gif
    } 
location / {      
    try_files $uri $uri/index.html $uri.html =404;    
     } 
 $uri指用户输入路径

12.keepalive_timeout timeout [header_timeout]; 设定保持连接超时时长,0表示禁止长连接,默认为75s

13.keepalive_requests number; 在一次长连接上所允许请求的资源的最大数量 默认为100

14.keepalive_disable none | browser ... 对哪种浏览器禁用长连接

15.send_timeout time; 向客户端发送响应报文的超时时长,此处是指两次写操作 之间的间隔时长,而非整个响应过程的传输时长

16.client_body_buffer_size size;

用于接收每个客户端请求报文的body部分的缓冲区大小 ;默认为16k;超出此大小时,其将被暂存到磁盘上的由下面 client_body_temp_path指令所定义的位置  

17.client_body_temp_path path [level1 [level2 [level3]]];

设定用于存储客户端请求报文的body部分的临时存储路 径及子目录结构和数量      
目录名为16进制的数字;    
client_body_temp_path   /var/tmp/client_body  1 2 2  
1 1级目录占1位16进制,即2^4=16个目录 0-f  
2 2级目录占2位16进制,即2^8=256个目录 00-ff  
2 3级目录占2位16进制,即2^8=256个目录 00-ff 

16和17 是用于处理用户上传文件,创建多层目录 避免一个目录下文件过多影响效率

18.limit_rate rate; 限制响应给客户端的传输速率,单位是bytes/second 默认值0表示无限制

19.limit_except method ... { ... },

仅用于location  限制客户端使用除了指定的请求方法之外的其它方法 
method:GET, HEAD, POST, PUT, DELETE   MKCOL, COPY, MOVE, OPTIONS, PROPFIND,   PROPPATCH, LOCK, UNLOCK, PATCH 

如:limit_except GET {    (除了get方法限制) 
            allow 192.168.1.0/24;   允许该网段的人使用get以外方法     
            deny  all;    其他人拒绝使用get以外的方法       
            }
  get方法实际上包含head方法

20.aio on | off | threads[=pool]; 是否启用aio功能 ,异步io,提高效率

21.directio size | off; 当文件大于等于给定大小时,例如directio 4m,先写缓存,达到4m时候同步(直接)写磁盘 , ,off 值同步写磁盘

22.open_file_cache off; 或者 open_file_cache max=N [inactive=time];

nginx可以缓存以下三种信息:  (1) 文件元数据:文件的描述符、文件大小和最近一次的修改时间  
(2) 打开的目录结构  
(3) 没有找到的或者没有权限访问的文件的相关信息   
max=N:可缓存的缓存项上限;达到上限后会使用LRU算法实现管理  
inactive=time:缓存项的非活动时长,在此处指定的时长内未被命中 的或命中的次数少于open_file_cache_min_uses指令所指定的次数的缓存项 即为非活动项,将被删除

23.open_file_cache_errors on | off; 是否缓存查找时发生错误的文件一类的信息 默认值为off

24.open_file_cache_min_uses number;

open_file_cache指令的inactive参数指定的时长内,至少被命中此处指定的次数方可被归类为活动项  默认值为1 open_file_cache_min_uses 2;  
指定时间内被访问2次的才缓存,少于则从缓存中删除

25.open_file_cache_valid time; 缓存项有效性的检查频率 默认值为60s


5.nginx实现反向代理

实现应用级反向代理(动静分离)
需要nginx代理服务器192.168.0.109 192.168.1.109
静态服务器192.168.1.112
动态服务器192.168.1.113
数据库服务器192.168.1.115
nfs服务器192.168.1.114

主要思路:利用nginx反向代理根据用户的uri来把请求转发到不同服务器,动态php程序转发到192.168.1.113服务器处理,静态图片通过192.168.1.112服务器处理,nfs服务器实现各个服务器共享存储,访问数据库则是192.168.1.115服务器

A.192.168.1.114服务器
1.在192.168.1.114启动nfs服务并拷贝phpmyadmin到要共享目录

[[email protected] ~]# systemctl start nfs-server
[[email protected] ~]# tar -xf phpMyAdmin-4.4.15.10-all-languages.tar.xz  -C /data/

2.修改phpmyadmin配置文件

[[email protected] phpmyadmin]# cp config.sample.inc.php config.inc.php
[[email protected] phpmyadmin]# vim config.inc.php
$cfg[‘blowfish_secret‘] = ‘sda1254z‘; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */   #修改该随机数
$cfg[‘Servers‘][$i][‘host‘] = ‘192.168.1.115‘;

3.编辑共享目录配置,把phpmyadmin文件夹共享出去

[[email protected] ~]# vim /etc/exports.d/wp.exports
/data/phpmyadmin 192.168.1.0/24(rw,sync,root_squash,no_all_squash)

4.启动查看共享目录

[[email protected] ~]# exportfs -r
[[email protected] ~]# exportfs -v
/data/phpmyadmin
           192.168.1.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)

B.在192.168.1.112安装nginx服务器用于处理静态页面
1.挂载共享目录

[[email protected] ~]# mkdir -p /apps/phpmyadmin
[[email protected] ~]# mount  192.168.1.114:/data/phpmyadmin /apps/phpmyadmin/

2.安装nginx服务并修改其默认主页

[[email protected] ~]#vim /etc/nginx/nginx.conf
 server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        root         /apps/phpmyadmin;

        include /etc/nginx/default.d/*.conf;

        location / {
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

C.在192.168.0.109安装nginx服务器
1.修改配置文件让其实现动静分离反代功能

[[email protected] ~]#vim /etc/nginx/conf.d/www.conf
server {
        server_name www.a.com;
        root /apps/phpmyadmin/;
        location / {
                index index.php index.html;

        }
        location ~* \.(gif|jpg|png|bmp|jpeg)$ {
                proxy_pass http://192.168.1.112;  #把图片文件交给192.168.1.112处理
        }
        location ~* \.php$ {
                proxy_pass http://192.168.1.113; #把php交给192.168.1.113处理
        }
}

2.挂载共享目录

[[email protected] ~]# mkdir -p /apps/phpmyadmin
[[email protected] ~]# mount  192.168.1.114:/data/phpmyadmin /apps/phpmyadmin/

D.在192.168.1.113安装httpd fpm服务
1.fpm需要编译安装php-7.1.26,详细步骤参考上一篇文章
2.修改httpd配置文件,加载fpm处理动态页面

[[email protected] network-scripts]# vim /etc/httpd/conf.d/fcgi.conf
DirectoryIndex index.php 
DocumentRoot /apps/phpmyadmin/  
ProxyRequests Off  
ProxyPassMatch ^/(.*\.php)$  fcgi://127.0.0.1:9000/apps/phpmyadmin/$1 
AddType application/x-httpd-php .php 
AddType application/x-httpd-php-source .phps 
<Directory "/apps/phpmyadmin/">  
Options None   
AllowOverride None   
Require all granted  
</Directory>

3.挂载共享目录

[[email protected] ~]# mkdir -p /apps/phpmyadmin
[[email protected] ~]# mount  192.168.1.114:/data/phpmyadmin /apps/phpmyadmin/

E.在192.168.1.115安装mariadb
1.安装修改配置

[[email protected] network-scripts]# yum install mariadb-server
[[email protected] network-scripts]# vim /etc/my.cnf
[mysqld]
innodb_file_per_table = on
skip_name_resolve = on

2.建立数据库和账号

MariaDB [(none)]> create database wpdb;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> grant all privileges on wpdb.* to [email protected]‘%‘ identified by "centos";
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

F.客户端测试
1.修改host文件解析域名

[[email protected] ~]# vim /etc/hosts
192.168.0.109 www.a.com

2.在浏览器需要www.a.com
技术图片技术图片

3.查看192.168.1.112日志文件,确实有png图片被调度到该服务器处理

[[email protected] ~]# tail -n 3 /var/log/nginx/access.log
192.168.1.109 - - [27/Mar/2019:18:49:59 +0800] "GET /themes/pmahomme/img/window-new.png HTTP/1.0" 200 468 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" "-"
192.168.1.109 - - [27/Mar/2019:18:49:59 +0800] "GET /themes/pmahomme/img/b_more.png HTTP/1.0" 200 111 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" "-"
192.168.1.109 - - [27/Mar/2019:18:52:02 +0800] "GET /themes/pmahomme/img/s_unlink.png HTTP/1.0" 200 589 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" "-"

4.查看192.168.1.113日志文件,确实有php请求被调度到该服务器处理

[[email protected] ~]# tail -n 3 /var/log/httpd/access_log
192.168.1.109 - - [27/Mar/2019:18:49:59 +0800] "POST /navigation.php?ajax_request=1 HTTP/1.0" 200 2015 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"
192.168.1.109 - - [27/Mar/2019:18:50:00 +0800] "POST /ajax.php HTTP/1.0" 200 1383 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"
192.168.1.109 - - [27/Mar/2019:18:50:00 +0800] "POST /version_check.php HTTP/1.0" 200 64 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"

以上是关于lvs的nat和dr实现,nginx反向代理,虚拟主机的主要内容,如果未能解决你的问题,请参考以下文章

LVS的NAT模式和DR模式

LVS-DR模式原理理解

第三十三天 LVS基础原理调度算法NAT和DR的实现 LXC虚拟化

LVS nat模式和DR模式简介

Keepalived实现LVS-DR集群高可用

nginx结合keepalived做高可用负载集群服务