nginx 基础3

nginx 基础3

更多干货

概述

Nginx具体的压缩配置

常用以下配置

gzip on|off
gzip_buffers 4K|8K 缓冲(和硬盘块相当)
gzip_comp_level [1-9] 推荐6
gzip_disable 正则匹配如User-Agent,针对古老浏览器不压缩
gzip_min_length 200
gzip_http_version 1.0|1.1
gzip_types text/plain , application/xml (各mime之间,一定要加空格,不是逗号)
gzip_vary on|off

Vary的作用:

ctoedu

Vary是用来标志缓存的依据. 如上图: 看出,这个新闻页面由

思考:

  • 1: 如果2个人,一个浏览器支持gzip,一个浏览器不支持gzip. 2个同时请求同个页面, chinaCache缓存压缩后,还是未压缩的?

  • 2: 如果1人,再次请求页面,chinaCache返回压缩后的缓存内容,还是压缩前的缓存内容?

这个时候 Vary的作用体现出来.

即------缓存的内容受 Accept-Encoding头信息的影响.所以如果

  1. 请求时,不支持gzip, 缓存服务器将会生成一份未gzip的内容.

  2. 请求时,支持gzip, 缓存服务器将会生成一份gzip的内容.

下次再请求时, 缓存服务器会考虑客户端的Accept-Encoding因素,并合理的返回信息

Nginx对于图片,js等静态文件的缓存设置

注:这个缓存是指针对浏览器所做的缓存,不是指服务器端的数据缓存.

主要知识点: location expires指令

        location ~ \.(jpg|jpeg|png|gif)$ {
            expires 1d;
        }
        location ~ \.js$ {
           expires 1h;
        }

设置并载入新配置文件,用firebug观察,会发现 图片内容,没有再次产生新的请求,原因—​利用了本地缓存的效果.

注: 在大型的新闻站,或文章站中,图片变动的可能性很小,建议做1周左右的缓存Js,css等小时级的缓存.

如果信息流动比较快,也可以不用expires指令,用last_modified, etag功能(主流的web服务器都支持这2个头信息)

原理是:

  1. 响应: 计算响应内容的签名, etag 和 上次修改时间

  2. 请求: 发送 etatg, If-Modified-Since 头信息.

  3. 服务器收到后,判断etag是否一致, 最后修改时间是否大于if-Modifiled-Since

  4. 如果监测到服务器的内容有变化,则返回304,

  5. 浏览器就知道,内容没变,直接用缓存.

    • 304 比起上面的expires 指令多了1次请求,但是比200状态,少了传输内容.

Nginx反向代理与负载均衡

ctoedu

正向代理

具体的负载均衡的方式

注意:负载均衡是一种方案,实现办法有DNS轮询, 如下图,DNS服务器允许一个域名有多个A记录, 那么在用户访问时,一般按地域返回一个较近的解析记录. 这样,全国不同的地区的用户,看到的163的主页,来自不同的服务器

ctoedu

第二步: 当 解析出结果,比如浏览器连接60.217时,这台主机后面还有N台,也要做负载均衡.

  1. 1: 硬件上做负载均衡, F5 BIG-IP ,硬件负载均衡(很贵).直接从TCP/IP的底层协议上,直接做数据包的中转.

  2. 2: 软件负载均衡, LVS

  3. 3: 反向代理+负载均衡

反向代理与keep-alive连接

ctoedu

Nginx反向代理设置

例: 把图片重写到 8080端口(既然能写到8080端口,就意味着可以写到其他独立服务器上)

        location ~ \.(jpg|jpeg|png|gif)$ {
                proxy_pass http://192.168.1.204:8080;
                expires 1d;
        }

集群与均衡-----如果后端的服务器非常多,该如何写? 又如何均匀的分发任务

nginx 与memcached的组合

  1. 用法: nginx响应请求时,直接请求memcached,如果没有相应的内容,再回调PHP页面,去查询database,并写入memcached.

  2. 分析: memcached是k/v存储, key-→value,nginx请求memecached时,用什么做key?一般用 uri arg 做key, 如 /abc.php?id=3

Nginx 第三方模块的安装

以ngx_http_php_memcache_standard_balancer-master为例

1:解压 到 path/ngx_module

配置:
./configure --prefix=/xxx/xxx --add_module=/path/ngx_module
编译 安装
Make && make instal

配置memcache集群

    upstream memserver {  把用到的memcached节点,声明在一个组里
        hash_key $request_uri;  // hash计算时的依据,以uri做依据来hash
        server localhost:11211;
        server localhost:11212;
    }

Location里

        location / {
           # root   html;
           set $memcached_key $uri;
           memcached_pass memserver;  // memserver为上面的memcache节点的名称
           error_page 404 /writemem.php;
           index  index.php index.html index.htm;
        }

在nginx中做集群与负载均衡,步骤都是一样的 Upstream {}模块 把多台服务器加入到一个组然后 memcached_pass, fastcgi_pass, proxy_pass =⇒ upstream组

默认的负载均衡的算法: 是设置计数器,轮流请求N台服务器.可以安装第3方模式,来利用uri做hash等等.

http://wiki.nginx.org/NginxHttpUpstreamConsistentHash

这个模块就是用一致性hash来请求后端结节,并且其算法,与PHP中的memcache模块的一致性hash算法,兼容.

安装该模块后:

Nginx.conf中

    upstream memserver {
        consistent_hash $request_uri;
        server localhost:11211;
        server localhost:11212;
    }

在PHP.ini中,如下配置

memcache.hash_strategy = consistent

这样: nginx与PHP即可完成对memcached的集群与负载均衡算法.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值