您的位置:首页 > 运维架构 > Nginx

Nginx做网站缓存

2016-05-18 11:50 621 查看
因为最近一直在学习nginx 服务器的知识,在网络中查询了一些资料,自己做了一些实例,在此做上记录,以便参考。

下面先给出完整的实例配置代码:

# user用来定义nginx的用户组
#user www;

# 设置nginx的进程数,(建议为当前系统的核心数)
worker_processes 2;

error_log logs/error.log;

#进程文件
pid logs/nginx.pid;

events {

#单个进程最大连接数(最大连接数=连接数*进程数)
worker_connections 1024;
}

#设定http服务器
http {
#文件扩展名与文件类型映射表
include mime.types;

#默认文件类型
default_type application/octet-stream;

#日志输出格式
log_format main '$remote_addr - $remote_user [$time_local] "$request"'
'$status $body_bytes_sent "$http_referer"'
'"$http_user_agent" "$http_x_forwarded_for" "$host"'

#默认编码
charset utf-8;

access_log logs/access.log main;

#开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,
#如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
sendfile on;

#长连接超时时间,单位是秒
keepalive_timeout 180;

#压缩数据设置 START
gzip on;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_proxied any;
gzip_min_length 1100;
gzip_buffers 16 8k;
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;

# Some version of IE 6 don't handle compression well on some mime-types,
# so just disable for them
gzip_disable "MSIE [1-6].(?!.*SV1)";

# Set a vary header so downstream proxies don't send cached gzipped
# content to IE6
gzip_vary on;
#压缩数据设置完成 END

#缓存设置 START

#开启缓存
proxy_buffering on;
proxy_cache_valid an 10m;
#缓存文件路径
proxy_cache_path data/cache levels=1:2 keys_zone=mycache:8m max_size=1000m inactive=600m;
#缓存临时文件路径
proxy_temp_path data/temp;
proxy_buffer_size 4k;
proxy_buffers 100 8k;

#缓存设置 END

#设置反向代理
upstream mbp_mapp.com { #服务器集群的名称
server 127.0.0.1:2048 weight=5;
}

#虚拟主机的配置
server {

#监听端口
listen 8086 ;

#域名可以有多个,用空格隔开
server_name localhost;

#开启ssl
#ssl off;

#配置证书位置
#ssl_certificate ssl/ca/server.crt;
#ssl_certificate_key ssl/ca/server.key;

location / { #将请求转发给对应服务器
root html;
index index.html index.htm;
}
}

#虚拟主机的配置
server {

#监听端口
listen 8086 ;

access_log logs/mapp.log main;
error_log logs/mapp_error.log;

#域名可以有多个,用空格隔开
server_name 192.168.31.228;

location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://mbp_mapp.com/; proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;

#设置该虚拟机的缓存
proxy_cache mycache;
proxy_cache_valid 100;

#代理设置
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
access_log logs/localhost_8843_access.log;
}
}


1. 在这个配置中关于缓存最重要的配置有如下(打开缓存器):
#缓存设置 START

#开启缓存
proxy_buffering on;
proxy_cache_valid an 10m;
#缓存文件路径
proxy_cache_path data/cache levels=1:2 keys_zone=mycache:8m max_size=1000m inactive=600m;
#缓存临时文件路径
proxy_temp_path data/temp;
proxy_buffer_size 4k;
proxy_buffers 100 8k;
#缓存设置 END这段配置文件,主要开启了缓存,并设置缓存的大小,下面对缓存的属性做一些说明:

proxy_buffering

语法:proxy_buffering on|off

默认值:proxy_buffering on

上下文:http, server, location

该指令开启从后端被代理服务器的响应内容缓冲.

如果缓冲区开启,nginx假定被代理的后端服务器会以最快速度响应,并把内容保存在由指令
proxy_buffer_size
 和 
proxy_buffers
指定的缓冲区里边.

如果响应内容无法放在内存里边,那么部分内容会被写到磁盘上.

如果缓冲区被关闭了,那么响应内容会按照获取内容的多少立刻同步传送到客户端

nginx不尝试计算被代理服务器整个响应内容的大小,nginx能从服务器接受的最大数据,是由指令
proxy_buffer_size
指定的.

proxy_cache_valid
语法:proxy_cache_valid reply_code [reply_code ...] time;
默认值:None

使用字段:http, server, location

为不同的应答设置不同的缓存时间

proxy_cache_path
语法:proxy_cache_path path [levels=number] keys_zone=zone_name:zone_size [inactive=time] [max_size=size];
默认值:None
使用字段:http

指令指定缓存的路径和一些其他参数,缓存的数据存储在文件中。缓存的文件名和key为代理URL的MD5 码。levels参数指定缓存的子目录数

proxy_buffer_size

语法:proxy_buffer_size the_size

默认值:proxy_buffer_size 4k/8k

上下文:http, server, location

该指令设置缓冲区大小,从被代理的后端服务器取得的响应内容,会先读取放置到这里.

小的响应header通常位于这部分响应内容里边.

默认来说,该缓冲区大小等于指令 
proxy_buffers
所设置的;但是,你可以把它设置得更小.

proxy_buffers

语法:proxy_buffers the_number is_size;

默认值:proxy_buffers 8 4k/8k;

上下文:http, server, location

该指令设置缓冲区的大小和数量,从被代理的后端服务器取得的响应内容,会放置到这里. 默认情况下,一个缓冲区的大小等于页面大小,可能是4K也可能是8K,这取决于平台

2. 在虚拟服务器中使用缓存
#设置该虚拟机的缓存
proxy_cache mycache;
proxy_cache_valid 100;然后访问服务器,会发现在在data/cache文件夹中多了一个文件,文件如下:



我们查看缓存文件内容,会发现,文件内容中缓存了页面信息,具体如下:



然而这个页面正是我访问的界面,这里我就不给我我的页面源码。

到这里使用Nginx缓存页面信息就做完了。具体一些指令的用法,后续会更新,

如果有什么疑问,欢迎留言!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nginx 网页缓存