Nginx做网站缓存

Posted 专注着

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx做网站缓存相关的知识,希望对你有一定的参考价值。

因为最近一直在学习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做网站缓存的主要内容,如果未能解决你的问题,请参考以下文章

使用nginx cache缓存网站数据实践

Nginx为uwsgi服务做缓存的配置方法

nginx为uwsgi服务做缓存的配置方法

nginx高并发优化之静态文件缓存配置

Nginx——nginx作为缓存服务(部分页面不缓存示例)

Nginx文件描述符缓存--open_file_cache