web服务器之nginx配置详解

缓存机制

💡对于性能优化而言,缓存是一种能够大幅度提升性能的方案,属于代理缓存的一种。

代理缓存常用配置
proxy_cache_path:代理缓存的路径

💡语法: proxy_cache_path path [levels=levels] [use_temp_path=on|off]keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time]

参数项含义如下:

  • path: 缓存的路径地址。
  • levels: 缓存存储的层次结构,最多允许三层目录。
  • use_temp_path: 是否使用临时目录
  • keys_zone: 指定一个共享内存空间来存储热点Key(1M可存储8000个Key)
  • inactive: 设置缓存多长时间未被访问后删除 (默认是十分钟)
  • max_size: 允许缓存的最大存储空间,超出后会基于LRU算法移除缓存,Nginx会创建个Cache manager的进程移除数据,也可以通过purge方式
  • manager_files: manager进程每次移除缓存文件数量的上限
  • manager_sleep: manager进程每次移除缓存文件的时间上限
  • manager_threshold: manager进程每次移除缓存后的间隔时间。
  • loader_files: 重启Nginx载入缓存时,每次加载的个数,默认100
  • loader_sleep: 每次载入时,允许的最大时间上限,默认200ms
  • loader_threshold:一次载入后,停顿的时间间隔,默认50
  • mspurger: 是否开启purge方式移除数据
  • purger_files: 每次移除缓存文件时的数量
  • purger_sleep: 每次移除时,允许消耗的最大时间
  • purger_threshold: 每次移除完成后,停顿的间隔时间
proxy_cache: 开启或关闭代理缓存,开启时需要指定一个共享内存区域

💡语法: proxy_cache zone | off

  • zone为内存区域的名称,proxy_cache_path中keys_zone设置的名称
proxy_cache key: 定义如何生成缓存的键

💡语法: proxy_cache_key string;

  • string为生成Key的规则,如: s c h e m e scheme schemeproxy_host$request_uri
proxy_cache_valid: 缓存生效的状态码与过期时间

💡语法: proxy_cache_valid [code …] time;

  • code为状态码,time为有效时间,可以根据状态码设置不同的缓存时间
  • 例如: proxy_cache_valid 200 302 30m
proxy_cache_min_uses: 设置资源被请求多少次后被缓存

💡语法: proxy_cache_min_uses number;

  • number为次数,默认为1
proxy_cache_use_stale: 当后端出现异常时,是否许Nginx返回缓存作为响应

💡语法: proxy_cache_use_stale error;

error为错误类型,可配置timeoutlinvalid headerlupdating http 500…

proxy_cache_lock: 对于相同的请求,是否开启锁机制,只允许一个请求发往后端.

💡语法: proxy_cache_lock on | off;

proxy_cache_lock_timeout: 配置锁超时机制,超出规定时间后会释放请求

💡语法: proxy_cache_lock_timeout time;

proxy_cache_methods: 设置对于那些HTTP方法开启缓存

💡语法: proxy_cache_methods method

  • method为请求方法类型,如GET、HEAD等
proxy_no_cache: 定义不存储缓存的条件,符合时不会保存

💡语法: proxy_no_cache string…;

  • string为条件,例如$cookie_nocache $arg_nocache $arg_comment;
proxy_cache_bypass: 定义不读取缓存的条件,符合时不会从缓存中读取

💡语法: proxy_cache_bypass string…

add_header: 往响应头中添加字段信息。

💡语法: add_header fieldName fieldValue

$upstream cache status: 记录了缓存是否命中的信息,存在多种情况

💡配置内置变量

  • MISS: 请求未命中缓存
  • HIT: 请求命中缓存
  • EXPIRED: 请求命中缓存但缓存已过期
  • STALE: 请求命中了陈旧缓存
  • REVALIDDATED: Nginx验证陈旧缓存依然有效
  • UPDATING: 命中的缓存内容陈旧,但正在更新缓存
  • BYPASS: 响应结果是从原始服务器获取的
http{
    # 设置缓存的目录,并且内存中缓存区名为hot_cache,大小为128m,
    # 三天未被访问过的缓存自动清楚,磁盘中缓存的最大容量为2GB。
    proxy_cache_path /soft/nginx/cache levels=1:2 keys_zone=hot_cache:128m inactive=3d max_size=2g;

    server{
        location / {
            # 使用名为nginx_cache的缓存空间
            proxy_cache hot_cache;
            # 对于200、206、304、301、302状态码的数据缓存1天
            proxy_cache_valid 200 206 304 301 302 1d;
            # 对于其他状态的数据缓存30分钟
            proxy_cache_valid any 30m;
            # 定义生成缓存键的规则(请求的url+参数作为key)
            proxy_cache_key $host$uri$is_args$args;
            # 资源至少被重复访问三次后再加入缓存
            proxy_cache_min_uses 3;
            # 出现重复请求时,只让一个去后端读数据,其他的从缓存中读取
            proxy_cache_lock on;
            # 上面的锁超时时间为3s,超过3s未获取数据,其他请求直接去后端
            proxy_cache_lock_timeout 3s;
            # 对于请求参数或cookie中声明了不缓存的数据,不再加入缓存
            proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;
            # 在响应头中添加一个缓存是否命中的状态(便于调试)
            add_header Cache-status $upstream_cache_status;
        }
    }
}

缓冲区

  • proxy_buffering: 是否启用缓冲机制,默认为on关闭状态
  • client_body_buffer_size: 设置缓冲客户端请求数据的内存大小
  • proxy_buffers: 为每个请求/连接设置缓冲区的数量和大小,默认4 4k/8k
  • proxy_buffer_size: 设置用于存储响应头的缓冲区大小
  • proxy_busy_buffers_size: 在后端数据没有完全接收完成时,Nginx可以将busy状态的缓冲返回给客户端,该参数用来设置busy状态的buffer具体有多大,默认为proxy buffer size*2
  • proxy_temp_path: 当内存缓冲区存满时,可以将数据临时存放到磁盘,该参数是设置存储缓冲数据的目录

    💡语法: proxy_temp_path path
    - path是临时目录的路径

  • proxy_temp_file_write_size: 设置每次写数据到临时文件的大小限制
  • proxy_max_temp_file_size: 设置临时的缓冲目录中允许存储的最大容量
  • 非缓冲参数项:
    • proxy_connect_timeout: 设置与后端服务器建立连接时的超时时间
    • proxy_read_timeout: 设置从后端服务器读取响应数据的超时时间
    • proxy_send_timeout: 设置向后端服务器传输请求数据的超时时间
http{
    # 设置与后端服务器建立连接时的超时时间
    proxy_connect_timeout 10;
    # 设置从后端服务器读取响应数据的超时时间
    proxy_read_timeout 120;
    # 设置向后端服务器传输请求数据的超时时间
    proxy_send_timeout 10;
    # 是否启用缓冲机制,默认为on关闭状态
    proxy_buffering on;
    # 设置缓冲客户端请求数据的内存大小
    client_body_buffer_size 512k;
    # 为每个请求/连接设置缓冲区的数量和大小
    proxy_buffers 4 64k;
    # 设置用于存储响应头的缓冲区大小。
    proxy_buffer_size 16k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k;
    # 设置存储缓冲数据的目录
    proxy_temp_path /soft/nginx/temp_buffer;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值