Nginx【通俗易懂】《下篇》

2023-12-14 19:54:06

目录

1.动静分离??????

2.封禁恶意IP??????

3.Nginx配置服务端缓存??????

4.高可用??????


1.动静分离??????

Nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx处理静态页面Tomcat 处理动态页面。有两种方式。

  1. 提高网站的运行效率:动态页面需要进行数据库查询和计算,而静态页面只需要简单的文件读取即可。如果将静态页面单独存放,就可以减少服务器的压力,从而提高网站的运行效率。

  2. 改善用户体验:静态页面加载速度快,能够更快地展现给用户,提高用户的访问体验。同时,静态页面往往也比较简洁,能够更好地展现网站的内容。

  3. 提高搜索引擎优化效果:搜索引擎更喜欢静态页面,因为这种页面更容易被搜索引擎抓取和解析,从而为网站带来更多的流量。

  4. 方便管理:将动态页面和静态页面分开管理,可以降低网站的维护成本和风险。静态页面只需要简单的文件存储和备份,而动态页面需要更为复杂的数据库管理和代码维护,分开管理可以更好地管理网站的各个部分。

方式一:

纯粹把静态文件独立成单独的域名,放在独立的服务器上(推荐)

  • 1.创建文件夹data,在创建image 存放图片,www存放网页?

  • 2.nginx.conf配置?
server {
        listen 80;
        server_name aabbcc.com;

        location /www/ {
            root /data/;
            index index.html index.hml;
           #列出当前目录
            autoindex on; 
         }
        location /image/ {
            root /data/;
            #列出当前目录
            autoindex on;
         }
}

方式二:

动态跟静态文件混合在一起发布,通过nginx来分开。

?

?2.封禁恶意IP??????

  • 1.创建一个配置文件存储要封禁的id

touch blacklist.conf
  • 2.加入要封禁的ip

deny 192.168.20.129;
deny 192.168.20.130;
deny 192.168.20.131;

~                        
  • 单独网站屏蔽IP的方法,把include xxx;放到网址对应的在server{}语句块
  • 所有网站屏蔽IP的方法,把include xxx;放到http {}语句块。?
  • 3.nginx配置?

include blacklist.conf;

3.Nginx配置服务端缓存??????

常见的缓存:

  • 数据库缓存
  • 应用程序缓存
  • Nginx网关缓存
  • 前端缓存

3.1添加缓存?

1. proxy_cache_path

该指定用干设置缓存文件的存放路径

proxy_cache_path /usr/local/proxy_cache levels=2:1  keys_zone=xz_cast:200m inactive=1d max_size=20g;
  • ?/usr/local/proxy_cache本地路径,用来设置Nginx缓存资源的存放地址
  • levels=1:2 指定该缓存空间对应的目录,最多可以设置3层,每层取值为1|2
  • key_zone 用来为这个缓存区设置名称和指定大小
  • max_size最大 缓存空间,如果不指定会使用掉所有磁盘空间。当达到 disk 上限后,会删除最少使用的 cacheo
  • inactive 某个缓存在inactive指定的时间内如果不访问,将会从缓存中删除proxy_cache_valid配置nginx cache中的缓存文件的缓存时间,proxy_cache_valid 200 304 2m对于状态为200和304的缓存文件的缓存时间是2分钟
  • use_temp_path建议为 off,则 nginx 会将缓存文件直接写入指定的 cache 文件中
  • ?proxy_cache启用proxy cache,指定key_zone,如果proxy_cache off表示关闭掉缓存
  • ?add_header Nging-Cache "$upstream_cache_status"用于前端判断是否是缓存,miss、hit、 expired(缓存过期)、updating(更新,使用旧的应答)

注意:一定加入 user root;不然没有权限

2.proxy_cache?

该指令用来开启或关闭代理缓存,如果是开启则自定使用哪个缓存区来进行缓存。

语法:proxy_cache zone_name |off;

3.proxy_cache_key

该指令用来设置web缓存的key值, Nginx会根据key值MDS哈希存缓存。?

4.proxy_cache_valid

该指令用来对不同返回状态码的URL设置不同的缓存时间

语法:proxy_cache_valid [code ...] time;

5.proxy_cache_min_uses?

该指令用来设置资源被访问多少次后被缓存

语法:?proxy_cache_min_uses number;

6.proxy_cache_methods

该指令用户设置缓存哪些HTTP方法

语法:proxy_cache_methods GET| HEAD |POST;

 proxy_cache_path /usr/local/proxy_cache levels=2:1  keys_zone=xz_cast:200m inactive=1d max_size=20g;
    server {
        listen       80;
        server_name  xz.com;

        location / {
           proxy_pass http://xz;
           proxy_intercept_errors on;

           proxy_cache xz_cast;
           proxy_cache_key xz;
           add_header nginx-cache "$upstream_cache_status";
           proxy_cache_valid 200 5d;
         }

?3.2清除缓存?

  • 1.删除缓存目录
  • 2.使用第三方扩展模块

4.高可用??????

4.1问题:?

在使用 Nginx 做反向代理或者负载均衡的时候,都是以 Nginx 为入口,如果 Nginx 宕机了,那么所有的服务都无法正常提供,影响非常严重。

?4.2高可用说明

yum -y install keepalived

为了避免负载均衡服务器宕机造成严重影响,就需要建立一个备份机。主服务器和备份机上都运行高可用(High Availability)监控程序,通过传送信息来监控对方的运行状况当备份机不能在一定的时间内收到这样的信息时它就接管主服务器的服务IP并继续提供负载均衡服务;当备份管理器又从主管理器这样的信息时,它就释放服务IP地址,这样的主服务器就开始再次提供负载均衡服务。

?4.3keepalived

我们可以通过 keepalived 来实现 Nginx 的高可用,keepalived 是集群管理中保证集群高可用的一个服务软件,用来防止单点故障Keepalived的作用是检测 web 服务器的状态,如果有一台 web 服务器死机或工作出现故障,Keepalived 将能检测到,并将有故障的 web 服务器从系统中剔除,当web服务器工作正常后 Keepalived 会自动将该 web 服务器加入到服务器群中。这些工作全部都会自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。keepalived 可以理解为一个健康检查的软件。

安装:

yum -y install keepalived

安装的位置: /etc/keepalived

4.4高可用配置

直接替换原来的配置文件keepalived.conf

主:

global_defs {
    notification_email {   # keepalived服务宕机异常出现的时候,发送通知邮件 可以是多个
      acassen@firewall.loc  #  收件人邮箱1
      failover@firewall.loc   #  收件人邮箱2
      sysadmin@firewall.loc   #  收件人邮箱3
    }
    notification_email_from Alexandre.Cassen@firewall.loc   #邮件发件人
    smtp_ server 192.168.20.129  #主服务器的ip地址。邮件服务器地址
    smtp_connect_timeout 30    # 超时时间
    router_id LVS_DEVEL    # 机器标识 局域网内唯一即可。 LVS_DEVEL这字段在/etc/hosts文件中看;通过它访问到主机
}
vrrp_script chk_http_ port {
    script "/usr/local/src/nginx_check.sh"   #检测脚本存放的路径
    interval 2   # 检测脚本执行的间隔,即检测脚本每隔2s会自动执行一次
    weight 2  #权重,如果这个脚本检测为真,服务器权重+2
}
vrrp_instance VI_1 {
    state MASTER    # 指定keepalived的角色,MASTER为主,BACKUP为备。备份服务器上需将MASTER 改为BACKUP
    interface ens33  # 通信端口 通过ip addr可以看到,根据自己的机器配置
    virtual_router_id 51 # vrrp实例id  keepalived集群的实例id必须一致,即主、备机的virtual_router_id必须相同
    priority 100         #优先级,数值越大,获取处理请求的优先级越高。主、备机取不同的优先级,主机值较大,备份机值较小
    advert_int 1    #心跳间隔,默认为1s。keepalived多机器集群 通过心跳检测当前服务器是否还正常工作,如果发送心跳没反应,备份服务器就会立刻接管;
    authentication {     # 服务器之间通信密码
        auth type PASS   #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
        auth pass 1111
    }
    virtual_ipaddress { # 自定义虚拟IP。自定义的虚拟ip得根据真实ip设置。比如真实ip是192.168.20.129,那么虚拟ip可以设置为192.168.20.139~255,前面三个数得一致
        192.168.20.50 # 定义虚拟ip(VIP),可多设,每行一个
    }
}

备份:

global_defs {
    notification_email {
      acassen@firewall.loc
      failover@firewall.loc
      sysadmin@firewall.loc
    }
    notification_email_from Alexandre.Cassen@firewall.loc
    smtp_ server 192.168.20.130    #备份服务器的ip地址
    smtp_connect_timeout 30
    router_id LVS_DEVEL    # LVS_DEVEL这字段在/etc/hosts文件中看;通过它访问到主机
}
vrrp_script chk_http_ port {
    script "/usr/local/src/nginx_check.sh"   #检测脚本
    interval 2   # (检测脚本执行的间隔)2s
    weight 2  #权重,如果这个脚本检测为真,服务器权重+2
}
vrrp_instance VI_1 {
    state BACKUP    # 指定keepalived的角色,MASTER为主,BACKUP为备。备份服务器上需将MASTER 改为BACKUP
    interface ens33 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
    virtual_router_id 51 # 虚拟路由编号,主、备机的virtual_router_id必须相同
    priority 90         #优先级,数值越大,获取处理请求的优先级越高。主、备机取不同的优先级,主机值较大,备份机值较小
    advert_int 1    # 检查间隔,默认为1s(vrrp组播周期秒数),每隔1s发送一次心跳
    authentication {     # 校验方式, 类型是密码,密码1111
        auth type PASS   #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
        auth pass 1111
    }
    virtual_ipaddress { # 虛拟ip
        192.168.20.50 # 定义虚拟ip(VIP),可多设,每行一个
    }
}

主,备份机:?根据配置在/usr/local/src下创建文件nginx_check.sh,并加入配置

#! /bin/bash
#检测nginx是否启动了
A=`ps -C nginx -no-header | wc - 1`
if [ $A -eq 0];then    #如果nginx没有启动就启动nginx 
    /usr/local/nginx/sbin/nginx    #通过Nginx的启动脚本来重启nginx
    sleep 2
    if [`ps -C nginx --no-header| wc -1` -eq 0 ];then   #如果nginx重启失败,则下面就会停掉keepalived服务,进行VIP转移
        killall keepalived
    fi
fi

分别启动主,备份Nginx和Keepalived?

4.5测试?

  • 1. 根据虚拟id:192.168.20.50访问

  • 2.停掉主服务器192.168.129,看是否还能访问成功

  • 3.继续访问虚拟IP:192.168.20.50,发现还能继续访问

  • 4.可以发现主 、备都绑定了虚拟ip

?

文章来源:https://blog.csdn.net/dfdg345/article/details/134664632
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。