Nginx高级篇:从原理到实战,彻底搞懂Nginx( 二 )

  • fair  按后端服务器的响应时间来分配 , 响应时间短的优先分配到请求 。比如:%20upstream%20myserver%20{%20fair;%20server%20192.168.4.32:5000;%20server%20192.168.4.32:8080;%20}
  • 4.%20Nginx%20缓存4.1%20实战一
    实现效果:  在3天内 , 通过浏览器地址栏访问%20http://192.168.4.32/a.jpg  , 不会从服务器抓取资源 , 3天后(过期)则从服务器重新下载 。
    具体配置:

    # http 区域下添加缓存区配置proxy_cache_path /tmp/nginx_proxy_cache levels=1 keys_zone=cache_one:512m inactive=60s max_size=1000m;# server 区域下添加缓存配置location ~ .(gif|jpg|png|htm|html|css|js)(.*) {proxy_pass http://192.168.4.32:5000;#如果没有缓存则转向请求proxy_redirect off;proxy_cache cache_one;proxy_cache_valid 200 1h;#对不同的 HTTP 状态码设置不同的缓存时间proxy_cache_valid 500 1d;proxy_cache_valid any 1m;expires 3d;}expires 是给一个资源设定一个过期时间 , 通过 expires 参数设置 , 可以使浏览器缓存过期时间之前的内容 , 减少与服务器之间的请求和流量 。也就是说无需去服务端验证 , 直接通过浏览器自身确认是否过期即可 , 所以不会产生额外的流量 。此种方法非常适合不经常变动的资源 。
    5. 动静分离5.1 实战一
    实现效果:
      通过浏览器地址栏访问 www.abc.com/a.html  , 访问静态资源服务器的静态资源内容 。通过浏览器地址栏访问 www.abc.com/a.jsp  , 访问动态资源服务器的动态资源内容 。
    具体配置:
    upstream static {server 192.167.4.31:80;}upstream dynamic {server 192.167.4.32:8080;}server {listen80;#监听端口server_namewww.abc.com; 监听地址# 拦截动态资源location ~ .*.(php|jsp)$ {proxy_pass http://dynamic;}# 拦截静态资源location ~ .*.(jpg|png|htm|html|css|js)$ {root /data/;#html目录proxy_pass http://static;autoindex on;;#自动打开文件列表}}6. 高可用  一般情况下 , 通过 nginx 主服务器访问后台目标服务集群 , 当主服务器挂掉后 , 自动切换至备份服务器 , 此时由备份服务器充当主服务器的角色 , 访问后端目标服务器 。
    6.1 实战一
    实现效果:
      准备两台 nginx 服务器 , 通过浏览器地址栏访问虚拟 ip 地址 , 把主服务器的 nginx 停止 , 再次访问虚拟 ip 地址仍旧有效 。
    具体配置:
    (1)在两台 nginx 服务器上安 keepalived 。
      keepalived 相当于一个路由 , 它通过一个脚本来检测当前服务器是否还活着 , 如果还活着则继续访问 , 否则就切换到另一台备份服务器 。
    # 安装 keepalivedyum install keepalived -y# 检查版本rpm -q -a keepalivedkeepalived-1.3.5-16.el7.x86_64(2)修改主备服务器 /etc/keepalived/keepalivec.conf 配置文件(可直接替换) , 完成高可用主从配置 。
      keepalived 将 nginx 服务器绑定到一个虚拟 ip  ,  nginx 高可用集群对外统一暴露这个虚拟 ip , 客户端都是通过访问这个虚拟 ip 来访问 nginx 服务器。
    global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from_Alexandre.Cassen@firewall.locsmtp_server 192.168.4.32smtp_connect_timeout 30router_id LVS_DEVEL# 在 /etc/hosts 文件中配置 , 通过它能访问到我们的主机}vrrp_script_chk_http_port {script "/usr/local/src/nginx_check.sh"interval 2# 检测脚本执行的时间间隔weight 2# 权重每次加2}vrrp_instance VI_1 {interface ens7f0 # 网卡 , 需根据情况修改state MASTER# 备份服务器上将 MASTER 改为 BACKUPvirtual_router_id 51 # 主备机的 virtual_router_id 必须相同priority 100# 主备机取不同的优先级 , 主机值较大 , 备份机值较小advert_int 1# 每隔多长时间(默认1s)发送一次心跳 , 检测服务器是否还活着authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.1.100 # VRRP H 虚拟地址 , 可以绑定多个}}字段说明