LNMP、keepalived、haproxy打怪升级之路七

目录

1、lnmp安全加固总结’

2、keepalived实现LVS的高可用

3、实现haproxy+keepalived集群高可用集群转发

4、haproxy调试算法总结


1、lnmp安全加固总结’

1、nginx应配置隐藏nginx版本号以及PHP版本号;即隐藏报文头Server字段和X-Powered-        BY字段

2、屏蔽IP、屏蔽各种user-agent、屏蔽特定的url、强制使用网站使用域名访问、设置timeout设置来抵御DOS攻击



- vim /apps/nginx/conf/nginx.conf

http{
    --------1.  隐藏nginx、php版本信息  ------
    server{
        server_tokens off;  ##添加此行,隐藏server信息即nginx的版本号信息
    }
    location ~ \.php$ {
        fastcgi_hide_header X-Powered-By;  ##添加此行,隐藏PHP版本号
    }

      
    -------- 2. 屏蔽或阻止各种不合理或恶意的访问或方法  ------
    if($requset_method !~ ^(GET|HEAD|POST)$){  ##限制访问方法
        return 404;
    }
    if($http_user_agent ~* "java|python|perl|ruby|curl|bash|echo|uname|base64|nmap|scan"{
        return 403;                       ##限制各种user-agent
    }
    location ~ ^/(\.user.ini|\.ht|\.git|\.svn|\.svn|LICENSE|REAME.md){
        deny all;                        ##限制不合理访问的资源
    }
}

2、keepalived实现LVS的高可用

1、将需要组成的VIP写在vrrp_instance块中

2、将需要调度lvs后端服务器配置写在virtual_server块中;

3、健康检查可设置HTTP/SSL应用层【HTTP_GET | SSL_GET】检查,或TCP检查【TCP_CHECK】

 !!需注意,如果指定lvs的DR模式,需要也在后端服务器上也配相应的VIP以及arp内核参数优化

------ VIP实例的配置 --------

vrrp_instance V1_1 {
    state MASTER                ---- 另一端配置:BACKUP
    interface eth0
    virtual_router_id 66        ---- 需一致
    priority 100                ---- 需不一致
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        10.0.0.10/24 dev eth0 label eth0:1          ##VIP地址,需一致
    }
    notify_master "/etc/keepalived/notify.sh m1"  ##配置监控master健康状态的notify.sh脚本
    notify_backup "/etc/keepalived/notify.sh b1"  ##自定义监控backup健康状态的notify.sh脚本          
    notify_fault "/etc/keepalived/notify.sh f1"  ##自定义监控fault健康状态的notify.sh脚本
}

------ virtual_server实例即keepalived内置的lvs负载调度后端 --------------

virtual_server 10.0.0.10 80 {
    lb_algo wlc            ## wlc调度算法
    lb_kind DR             ## DR模式
    protocol TCP           
    sorry_server 127.0.0.1 80    ##可用作后端服务器均挂了返回的sorry_server
    
    real_server 10.0.0.1 80{
        weight 1
        HTTP_GET {            ## HTTP健康监测方法
            url {
                path /monitor.html     ## 重复访问页面,若能访问表示仍健康
                status_code 200
            }
            connect_timeout 3         #超时时长
            nb_get_retry   3          #重试次数
            delay_before_retry 3      #重试之前的延迟时长
        }
    real_server 10.0.0.2 80{
        weight 1
        HTTP_GET {            ## HTTP健康监测方法
            url {
                path /monitor.html     ## 重复访问页面,若能访问表示仍健康
                status_code 200
            }
            connect_timeout 3         #超时时长
            nb_get_retry   3          #重试次数
            delay_before_retry 3      #重试之前的延迟时长
        }
    }     

}

##### 如果用TCP检查响应端口,使用TCP_CHECK 
        TCP_CHECK {
            connect_timeout 3         #超时时长
            nb_get_retry   3          #重试次数
            delay_before_retry 3      #重试之前的延迟时长

        }


3、实现haproxy+keepalived集群高可用集群转发

1、在haproxy.cfg配置文件中定义listen或者frontend/backend后端组server

2、对于haproxy一般启用监听非本地IP的端口内核参数net.ipv4.ip_nonlocal_bind=1

以及增大系统打开的端口范围 net.ipv4.ip_local_port_range = 10240 65535

以及修改内核参数提供最大进程限制数nproc以及打开最大文件数nofile

3、在keepalived中定义个检查haproxy状态的vrrp_script脚本以及vrrp配置块中除了定义VIP地址外在track_script调用这个脚本

----------------------------------【haproxy配置】----------------------------------------
- vim /etc/haproxy/haproxy.cfg
frontend web
    bind 10.0.0.10:80, 10.0.0.10:8080
    mode tcp
    balance roundrobin
    log global
    use_backend web_node

backend web_node
    mode tcp
    server web1 10.0.0.1:80 check inter 3000 fall 3 rise 3
    server web2 10.0.0.2:80 check inter 3000 fall 3 rise 3

listen stats   ## 状态页
    mode http
    bind :9999
    stats enable
    log global
    stats uri    /harpoxy-status
    stats auth   123456

- vim /etc/sysctl.conf       #修改内核参数ip_nonlocal_bind
net.ipv4.ip_nonlocal_bind = 1

- sysctl -p

  
----------------------------------【keepalived配置】-------------------------------------
- vim /etc/keepalived/keepalived.conf
vrrp_script check_haproxy {
    script "/etc/keepalived/check_haproxy.sh"         ##自定义写好的check_haproxy健康检查
           ### check_haproxy.sh其实就一条命令查看haproxy状态
           ### #!/bin/bash
           ### /usr/bin/kiallall -0 haproxy || systemctl restart haproxy
    interval 1
    weight -30            #脚本中检查状态不成功则降优先级30
    fall 3
    rise 2
    timeout 2
}

vrrp_install V1_1 {
    state MASTER
    interface eth0
    virtual_router_id 11
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        10.0.0.10/24 dev eth0 label eth0:1
    }
    track_interface {
        eth0
    }
    track_script {
        check_haproxy
    }
    notify_master "/etc/keepalived/notify.sh master"
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault"
}

 

 

4、haproxy调度算法总结

1、静态 (无法通过其他工具如socat动态修改权重,动态调整只有0和1,即关闭和开启)

  • static-rr  #加权轮询        
  • first   #一台连接数上限分别下一台

2、动态

  • roundrobin    #默认、轮询
  • leastconn    #加权最少连接
  • random     #随机

3、即能转化静态又能转换动态调度的(取决于hash_type是否为consistent)

       hash_type默认值为map-based取模法,hash_type为consistent一致性hash能动态调整

  • source    # 源地址hash
  • uri        # URL中的请求部分称为URI,URI的左半部户或整个uri做hash
  • url_param  # URL中的params部分中的参数如key对应的value值做hash
  • hdr           # http头部请求的信息做hash
  • rdp-cookie  #对windows远程桌面负载

 应用场景

first :            使用较少

static-rr:       做了session共享的web集群

roundrobin:      默认,也最常用的

leastconn:      数据库等适用于长连接的应用

source:         基于客户端公网IP的会话保持

uri:               缓存服务器、CDN服务商、

url_param:      可实现session保持

hdr:            基于客户端请求报文头做下一步处理(如归纳、行为分析)

rdp-cookie:      较少使用,对于windows机器

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值