LVS、nginx反向代理

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测试页

       


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章