nginx 缓存
2013-07-11 16:20
363 查看
nginx 做缓存
原已经安装好的nginx,现在需要添加一个未被编译安装的模块:
nginx -V 可以查看原来编译时都带了哪些参数
原来的参数:
--prefix=/app/nginx
添加的参数:
--with-http_stub_status_module --with-http_ssl_module --with-http_realip_module
nginx.conf
##cache##
proxy_connect_timeout 5;
proxy_read_timeout 60;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_temp_path /home/temp_dir;
proxy_cache_path /home/cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
proxy_headers_hash_bucket_size 1024;
proxy_headers_hash_max_size 512;
##end##
upstream backend_server {
server 192.168.1.5:80 weight=1 max_fails=2 fail_timeout=30s;
}
server
{
listen 80;
server_name www.lrm.com 192.168.1.7;
index index.php index.html index.htm;
root /usr/www/lrm;
location /
{
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_cache cache_one;
proxy_cache_valid 200 304 12h;
proxy_cache_key $host$uri$is_args$args;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://backend_server; expires 1d;
}
location ~ /purge(/.*)
{
allow 127.0.0.1;
allow 192.168.1.0/24;
deny all;
proxy_cache_purge cache_one $host$1$is_args$args;
}
location ~ .*\.(php|jsp|cgi)?$
{
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://backend_server; }
}
缓存 静态文件
更高级的缓存
memc-nginx-module
下载地址: https://github.com/agentzh/memc-nginx-module/downloads srcache-nginx-module
下载地址: https://github.com/agentzh/srcache-nginx-module/downloads ngx_http_upstream_keepalive
下载地址: http://mdounin.ru/hg/ngx_http_upstream_keepalive/ 解压在Nginx安装目录的同级目录下。
接着添加google-perftools-module模块,用来优化高并发时的内存管理性能
先安装 libunwind
再安装 google-perftools
1.2安装编译:1.2.1.进入Nginx安装目录。先去掉Nginx的Debug功能,编辑auto/cc/gcc,找到
然后注释掉CFLAGS行,如下
1.2.2.查看CPU型号
如果是Intel,一般PC机是显示 Pentium(R) Dual-Core CPU E6500 @ 2.93GHz , 前面是Pentium.
如果是AMD, 一般就是opteron.
如果是服务器,一般是Core
具体的要在生产服务器中查找对应的CPU弄号参数
这个型号在接下来编译的时候指定给–with-cpu-opt参数
1.2.3.生成配置
1.2.4.编译
1.3 配置:
逻辑要点解释:memc-nginx是一个标准的upstream模块,因此首先需要定义memcache的upstream。
这里我在本机上启动了一 个memcache服务,端口为默认的11211,keepalive指令是http-upsteram-keepalive-module提供的功能, 这里我们最大保持512个不立即关闭的连接用于提升性能。下面是为memc-nginx-module配置location,我们配置为/memc,所有请求都通过请求这个location来操作 memcache.
memc-nginx-module存取memcache是基于http method语义的,使用http的GET方法表示get、PUT方法表示set、DELETE方法表示delete。
这里我们将/memc设为internal表示只接受内部访问,不接收外部http请求,这是为了安全考虑,当然如果需要通过http协议开放外部访问,可以去掉internal然后使用deny和allow指 令控制权限。比较重要的是$memc_key这个变量,它表示以什么作为key,这里我们直接使用Nginx内置的$query_string来作为 key,$memc_exptime表示缓存失效时间,以秒记。这里统一设为300(5分钟),在实际应用中可以根据具体情况为不同的内容设置不同的过期时间。最后我们为“/”这个location配置了缓存,这表示所有的请求都会结果被缓存,当然这里只是示例需要,实际中一般不会这么配,而是为特定需要缓存的location配置缓存。 比如只缓存图片,js,css等资源文件。srcache_fetch表示注册一个输入拦截处理器到location,这个配置将在location进入时被执行;
而 srcache_store表示注册一个输出拦截器到location,当location执行完成并输出时会被执行。
注意srcache模块实际可以与任何缓存模块进行配合使用,而不必一定是memc。这里我们以$uri$args作为缓存的key。经过上述配置后,相当于对Nginx增加了如下逻辑:当所请求的uri以“.php”结尾时,首先到memcache中查询有没有 以$uri$args为key的数据,如果有则直接返回;否则,执行location的逻辑,如果返回的http状态码为200,则在输出前 以$uri$args为key,将输入结果存入memcache。
原已经安装好的nginx,现在需要添加一个未被编译安装的模块:
nginx -V 可以查看原来编译时都带了哪些参数
原来的参数:
--prefix=/app/nginx
添加的参数:
--with-http_stub_status_module --with-http_ssl_module --with-http_realip_module
步骤如下: 1. 使用参数重新配置: ./configure --prefix=/app/nginx --user=nobody --group=nobody --with-http_stub_status_module \ --with-http_ssl_module --with-http_realip_module \ --add-module=../nginx_upstream_hash-0.3.1/ \ --add-module=../gnosek-nginx-upstream-fair-2131c73/ 2. 编译: make #不要make install,否则就是覆盖安装 3. 替换nginx二进制文件: cp /app/nginx/sbin/nginx /app/nginx/sbin/nginx.bak cp ./objs/nginx /app/nginx/sbin/本机 192.168.1.7
nginx.conf
##cache##
proxy_connect_timeout 5;
proxy_read_timeout 60;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_temp_path /home/temp_dir;
proxy_cache_path /home/cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
proxy_headers_hash_bucket_size 1024;
proxy_headers_hash_max_size 512;
##end##
upstream backend_server {
server 192.168.1.5:80 weight=1 max_fails=2 fail_timeout=30s;
}
server
{
listen 80;
server_name www.lrm.com 192.168.1.7;
index index.php index.html index.htm;
root /usr/www/lrm;
location /
{
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_cache cache_one;
proxy_cache_valid 200 304 12h;
proxy_cache_key $host$uri$is_args$args;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://backend_server; expires 1d;
}
location ~ /purge(/.*)
{
allow 127.0.0.1;
allow 192.168.1.0/24;
deny all;
proxy_cache_purge cache_one $host$1$is_args$args;
}
location ~ .*\.(php|jsp|cgi)?$
{
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://backend_server; }
}
缓存 静态文件
更高级的缓存
Nginx高性能优化插件与缓存的安装和配置
2012-01-03 / Linux安全 / Linux, Nginx, 性能优化, 缓存 /01.1下载模块:memc-nginx-module
下载地址: https://github.com/agentzh/memc-nginx-module/downloads srcache-nginx-module
下载地址: https://github.com/agentzh/srcache-nginx-module/downloads ngx_http_upstream_keepalive
下载地址: http://mdounin.ru/hg/ngx_http_upstream_keepalive/ 解压在Nginx安装目录的同级目录下。
接着添加google-perftools-module模块,用来优化高并发时的内存管理性能
先安装 libunwind
如果是AMD, 一般就是opteron.
如果是服务器,一般是Core
具体的要在生产服务器中查找对应的CPU弄号参数
这个型号在接下来编译的时候指定给–with-cpu-opt参数
1.2.3.生成配置
这里我在本机上启动了一 个memcache服务,端口为默认的11211,keepalive指令是http-upsteram-keepalive-module提供的功能, 这里我们最大保持512个不立即关闭的连接用于提升性能。下面是为memc-nginx-module配置location,我们配置为/memc,所有请求都通过请求这个location来操作 memcache.
memc-nginx-module存取memcache是基于http method语义的,使用http的GET方法表示get、PUT方法表示set、DELETE方法表示delete。
这里我们将/memc设为internal表示只接受内部访问,不接收外部http请求,这是为了安全考虑,当然如果需要通过http协议开放外部访问,可以去掉internal然后使用deny和allow指 令控制权限。比较重要的是$memc_key这个变量,它表示以什么作为key,这里我们直接使用Nginx内置的$query_string来作为 key,$memc_exptime表示缓存失效时间,以秒记。这里统一设为300(5分钟),在实际应用中可以根据具体情况为不同的内容设置不同的过期时间。最后我们为“/”这个location配置了缓存,这表示所有的请求都会结果被缓存,当然这里只是示例需要,实际中一般不会这么配,而是为特定需要缓存的location配置缓存。 比如只缓存图片,js,css等资源文件。srcache_fetch表示注册一个输入拦截处理器到location,这个配置将在location进入时被执行;
而 srcache_store表示注册一个输出拦截器到location,当location执行完成并输出时会被执行。
注意srcache模块实际可以与任何缓存模块进行配合使用,而不必一定是memc。这里我们以$uri$args作为缓存的key。经过上述配置后,相当于对Nginx增加了如下逻辑:当所请求的uri以“.php”结尾时,首先到memcache中查询有没有 以$uri$args为key的数据,如果有则直接返回;否则,执行location的逻辑,如果返回的http状态码为200,则在输出前 以$uri$args为key,将输入结果存入memcache。
相关文章推荐
- nginx+ keepalived+proxy_cache实现nginx高可用及高速缓存
- Nginx 静态资源缓存设置
- nginx平台初识(二) 浏览器 HTTP 协议缓存机制详解
- 谈谈varnish,squid,apache,nginx缓存的对比
- nginx 反向代理 负载均衡 页面缓存
- nginx.conf配置整理笔记(反向代理、缓存、均衡负载)更新中
- Nginx 反向代理、负载均衡、页面缓存、URL重写以及读写分离
- LNMP第二部分nginx、php配置(用户认证、域名重定向、日志、配置缓存、防盗链) 推荐
- Nginx缓存实现
- Nginx 下缓存静态文件(如css js)
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- nginx proxy cache 缓存 流程
- nginx根据日志清除缓存脚本
- nginx图片缓存服务器配置实战
- nginx+memcache增加全站缓存系统
- Nginx gzip压缩、expires缓存时间
- nginx利用lua实现nginx反向代理proxy_store缓存文件自删除
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解 (转载)
- nginx安装配置+清缓存模块安装负载均衡
- 使用Nginx的proxy_cache缓存功能取代Squid