LVS、nginx反向代理

作者: 请叫我飘哥 | 来源:发表于2019-04-15 20:27 被阅读37次

    1、LVS实现nat,dr

    • LVS简介
      LVS是Linux Virtual Server的简称,其主要包含VS:Virtual server 和RS:Real server,VS根据请求报文中的目标IP和目标协议及端口通过其调度算法转发至后端的RS,实现四层路由器,四层交换机。

    • LVS的两个组件

      • ipvadm:用户空间的命令行工具,规则创建和管理,用于管理集群服务及Real Server
      • ipvs:工作于内核空间的netfilter的INPUT钩子之上的框架
    • LVS集群类型中的术语

      • VS:Virtual Server ,Director
      • RS:Real server,backend server
      • CIP:Client IP
      • VIP:Virtual Server IP
      • DIP:Director IP
      • RIP:Real Server IP
    • LVS集群类型

      • lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
      • lvs-dr:操纵封装新的MAC地址
      • lvs-tun:在原请求IP报文之外新加一个IP首部
      • lvs-fullnat:修改请求报文的源和目的IP(默认不支持)
    • LVS-NAT搭建

      • NAT集群设计要点
        多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发,须满足以下条件
        1、RIP和DIP必须在同一个IP网络,且应该使用私网地址,RS的网关要指向DIP
        2、请求报文和响应报文都必须由Director转发,Director易于成为系统瓶颈
        3、支持端口映射,可修改请求报文的目标端口
        4、vs必须是Linux系统,rs可以是任意系统

      • 设计TOP


        LVS-NAT设计图
      • 搭建过程

        • 在VS服务器上安装ipvsadm命令行工具(Centos默认开启了ipvs模块)
          yum -y install ipvsadm
        • 创建集群
        ipvsadm -A -t 10.192.1.165:80 -s rr
        ipvsadm -a -t 10.192.1.165:80 -r 192.168.0.2:80 -m
        ipvsadm -a -t 10.192.1.165:80 -r 192.168.0.3:80 -m
        
        • 查看集群
        [root@ceph-client ~]# ipvsadm -L
        IP Virtual Server version 1.2.1 (size=4096)
        Prot LocalAddress:Port Scheduler Flags
         -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
        TCP  ceph-client:http rr
         -> 192.168.0.2:http             Masq    1      0          0         
         -> 192.168.0.3:http             Masq    1      0          0         
        [root@ceph-client ~]# 
        
        • 在RS服务器上安装并配置nginx静态test.html页面
        • curl测试访问
        [root@yum ~]# for i in {1..10};do curl 10.192.1.165/test.html;done
        <h1> RS1 192.168.0.2 <h1>
        <h1> RS2 192.168.0.3 <h1>
        <h1> RS1 192.168.0.2 <h1>
        <h1> RS2 192.168.0.3 <h1>
        <h1> RS1 192.168.0.2 <h1>
        <h1> RS2 192.168.0.3 <h1>
        <h1> RS1 192.168.0.2 <h1>
        <h1> RS2 192.168.0.3 <h1>
        <h1> RS1 192.168.0.2 <h1>
        <h1> RS2 192.168.0.3 <h1>
        [root@yum ~]# 
        在VS查看
        [root@ceph-client ~]# ipvsadm -l
        IP Virtual Server version 1.2.1 (size=4096)
        Prot LocalAddress:Port Scheduler Flags
          -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
        TCP  ceph-client:http rr
          -> 192.168.0.2:http             Masq    1      0          5         
          -> 192.168.0.3:http             Masq    1      0          5  
        
    • LVS-DR搭建

      • DR集群设计要点
        Direct Routing,直接路由
        通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均不变
        Director和各RS都得配置使用VIP
        1、确保前端路由器将目标IP为VIP的请求报文发往Director
        a、在前端网关做静态绑定(不建议)
        b、在RS上使用arptables(不建议)
        c、在RS上修改内核参数以限制arp通告及应答级别(推荐)
        arp_announce=2
        arp_ignore=1
        2、RS的RIP可以使用私网地址,也可以是公网地址,RIP与DIP在同一个IP网络,RIP的网关不能指向DIP,以确保相应报文不会经由Director
        3、RS跟Director要在同一个物理网络
        4、请求报文要经由Director,但相应不能经由Director,而是由RS直接发往Client
        5、不支持端口映射
      • 设计TOP


        LVS-DR设计图
    * 搭建过程
        * 在VS服务器上安装ipvsadm命令行工具(Centos默认开启了ipvs模块)
        `yum -y install ipvsadm`
        * 创建集群
        ```
        ipvsadm -A -t 10.192.1.170:80 -s rr
        ipvsadm -a -t 10.192.1.170:80 -r 10.192.1.163 -g
        ipvsadm -a -t 10.192.1.170:80 -r 10.192.1.164 -g
        ```
       * 查看集群
       ```
       [root@vs ~]# ipvsadm -ln
      IP Virtual Server version 1.2.1 (size=4096)
      Prot LocalAddress:Port Scheduler Flags
        -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
      TCP  10.192.1.170:80 rr
        -> 10.192.1.163:80              Route   1      0          0         
        -> 10.192.1.164:80              Route   1      0          0         
      [root@vs ~]# 
    
       ```
      * 在RS服务器上安装并配置nginx静态test.html页面
      * curl测试访问
      ```
      [root@yum ~]# for i in {1..10};do curl 10.192.1.170/test.html;done
      <h1> RS1 10.192.1.164 <h1>
      <h1> RS2 10.192.1.163 <h1>
      <h1> RS1 10.192.1.164 <h1>
      <h1> RS2 10.192.1.163 <h1>
      <h1> RS1 10.192.1.164 <h1>
      <h1> RS2 10.192.1.163 <h1>
      <h1> RS1 10.192.1.164 <h1>
      <h1> RS2 10.192.1.163 <h1>
      <h1> RS1 10.192.1.164 <h1>
      <h1> RS2 10.192.1.163 <h1>
      [root@yum ~]# 
      在VS查看
      [root@vs ~]# ipvsadm -ln
      IP Virtual Server version 1.2.1 (size=4096)
      Prot LocalAddress:Port Scheduler Flags
        -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
      TCP  10.192.1.170:80 rr
        -> 10.192.1.163:80              Route   1      0          5         
        -> 10.192.1.164:80              Route   1      0          5   
      ```      
    

    2、nginx反向代理,虚拟主机

    • 概念
      反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
    • 反向代理工作原理图


      反向代理工作原理图

      用户终端为互联网用户,被代理服务器是提供应用服务的服务器。

    • 实现nginx反向代理虚拟主机
      • 环境:
        10.192.1.163 nginx反向代理服务器
        10.192.1.164 nginx 虚拟机主机(静态页面)
        两台服务器均已安装nginx服务
      • 配置代理服务器
      首先在主配置文件http{}中定义缓存设置
      http {
      ...
      proxy_cache_path /data/nginx/cache levels=1:1:1 keys_zone=mcache:10m max_size=3g;
      ...
      定义虚拟机主机:conf.d/ilinux.conf
      }
      server {
          listen 80;
          server_name www.ilinux.com;
          proxy_cache mcache;
          proxy_cache_key $request_uri;
          proxy_cache_methods GET HEAD;
          proxy_cache_valid 200 302 10m;
          proxy_cache_valid 404 1m;
          proxy_cache_use_stale http_502;
          location / {
          proxy_pass http://www.index.com;
          }
      
          location ~*.jpg$ {
          proxy_pass http://10.192.1.164:8081;
          }
      }
      
      说明:代理服务器配置了监听80端口基于FQDN的虚拟主机
      并定义了缓存配置
      将 url中 以.gpg结尾的图片访问代理到http://10.192.1.164:8081这个虚拟主机
      将其它的请求代理到http://www.index.com这个虚拟主机
      
      • 配置被代理服务器
      cd /etc/nginx/conf.d
      分别定义两个虚拟主机:
      
      定义ilinux虚拟主机
      server {
          listen  80;
          server_name www.index.com;
          root /data1/;
          location / {
              autoindex on;
              autoindex_exact_size off;
              autoindex_localtime on;
          }
      }
      vim /data1/index.thml
      <h1>www.index.com<h1>
      
      定义图片访问虚拟主机
      server {
          listen 8081;
          server_name _;
          root /data;
          location / {
              autoindex on;
              autoindex_exact_size off;
              autoindex_localtime on;
          }
      }
      
      • 测试


        ilinux测试页
        .jpg测试页

    相关文章

      网友评论

        本文标题:LVS、nginx反向代理

        本文链接:https://www.haomeiwen.com/subject/eusziqtx.html