Nginx缓存加速

一、Nginx缓存概述

  • 提供与Squid类似的缓存,把URL以及相关信息当成key,用MD5编码哈希后,把数据文件保存在硬盘上,并且只能为指定的URL或者状态码设置过期时间,并不支持类似 squid的purge命令来手动清除指定缓存页面,但是可以通过第三方的ngx_cache_purge来清除指定的URL缓存
  • Nginx的缓存加速功能是由proxy_cache(用于反向代理和静态缓存)和fastcgi_cache(PHP动态缓存)两个功能模块完成

1.proxy_cache原理

2.Nginx缓存特点

  • 缓存稳定,运行速度与Squid相差无几(因为都使用硬盘缓存)
  • 对多核CPU的利用率比其他的开源软件好
  • 支持高并发请求数,能同时承受更多的访问请求

3.Nginx缓存、Varnish、Squid对比

  • Squid:应用较早,支持传统、透明、反向等功能的一款应用软件,设置较复杂,一般配合CDN
  • Varnish:新兴软件,设计简单,使用内存缓存数据(快)
  • Nginx缓存:需通过调用模块实现缓存功能,基于硬盘缓存数据

二、案例:Nginx缓存加速



主机 系统 IP 网卡 软件
Nginx Centos 6.7 64Bit 192.168.1.10 vmnet1 nginx nginx_cache_purge
Web(Apache) Centos 6.7 64Bit 192.168.1.100 vmnet1 httpd

Nginx

1.环境准备

vim /etc/sysconfig/network-scripts/ifcfg-eth0
        DEVICE=eth0                             //网卡名称
        TYPE=Ethernet                           //网卡类型为以太网
        ONBOOT=yes                          //开机自启该网卡
        NM_CONTROLLED=no                        //关闭NetworkManager
        BOOTPROTO=static                        //网卡设置为静态方式
        IPADDR=192.168.1.10                     //IP地址配置
        NETMASK=255.255.255.0                   //子网掩码配置
/etc/init.d/network restart

2.安装Nginx

yum -y install pcre pcre-devel          //安装依赖包
tar -zxvf ngx_cache_purge-2.0.tar.gz -C /usr/src/
//解压nginx模块(用于支持Nginx缓存)
tar -zxvf nginx-1.6.0.tar.gz -C /usr/src/   //解压Nginx软件源码到/usr/src/目录
cd /usr/src/nginx-1.6.0/                //进入Nginx解压目录
useradd -M -s /sbin/nologin nginx       //新建Nginx运行用户
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-pcre --add-module=/usr/src/ngx_cache_purge-2.0/

选项
--prefix=/usr/local/nginx:指定Nginx安装目录为/usr/local/nginx
--user=nginx:指定Nginx运行用户为nginx
--group=nginx:指定Nginx运行组为nginx
--with-http_stub_status_module:开启状态统计(一个简单的页面,显示访问量等)
--with-pcre:启用pcre库支持
--add-module=/usr/src/ngx_cache_purge-2.0/:指定需额外加载模块的目录位置

make && make install                            //编译并安装
echo "PATH=$PATH:/usr/local/nginx/sbin">>/etc/profile
//将Nginx命令路径加入PATH变量,这时在任意位置都可使用Nginx相关命令
source /etc/profile                         //立即生效该PATH变量

3.配置Nginx

vim /usr/local/nginx/conf/nginx.conf            //编辑Nginx主配置文件
        user  nginx nginx;
                //指定Nginx运行用户和组
        worker_processes 1;
                //启动进程数(根据物理CPU个数设置)
        error_log  logs/error.log  crit;
                //定义错误日志,记录级别为crit(关键事件)
        pid        logs/nginx.pid;
                //指定PID文件(存储程序进程号)位置
                worker_rlimit_nofile 65535;
                //打开文件的最大句柄数
        events {
            use epoll;
                        //使用epoll网络I/O模型,优化Nginx
            worker_connections  65535;
                        //每个工作进程允许最大的同时连接数,该值与最大句柄书保持一致
        }
        http {
            include       mime.types;
                        //额外加载该文件
            default_type  application/octet-stream;
                        //默认响应为文件流
            charset utf-8;
                        //定义网站默认采用字符集
            sendfile        on;
                        //打开系统函数sendfile(),提高性能
            tcp_nopush     on;
                        //sendfile开启后才生效,调用tcp_cork方法
            keepalive_timeout  65;
                        //会话保持时间,指定时间内客户端无访问请求,断开连接,需连接时重新请求
            client_body_buffer_size 512k;
                        //配置body缓冲区大小(当用户上传内容超出缓冲区(内存)大小,会使用"client_body_tmp_path"选项临时将文件部分或全部写入到临时文件中做处理;默认为系统页两倍大小"getconf PAGESIZE"查看页大小;"client_max_body_size"设置上次文件最大值)
            proxy_connect_timeout 5;
                        //后端服务器连接的超时时间(发起握手等候响应超时时间),不能超过75秒
            proxy_read_timeout 60;
                        //连接成功后,等候后端服务器响应时间,决定了nginx会等待多长时间来获得请求的响应(也可以说是后端服务器处理请求的时间)
            proxy_send_timeout 5;
                        //后端服务器数据回传时间,在规定时间之内后端服务器必须传完所有的数据,如果超时后,upstream没有收到新的数据,nginx会关闭连接
                        proxy_buffer_size 16k;
                        //从后端服务器响应头缓存区大小
                        proxy_buffers 4 64k;
                        //设置代理响应缓冲区的数量和大小
            proxy_busy_buffers_size 128k;
                        //proxy_buffers和proxy_buffer_size的一部分。nginx会在没有完全读完后端响应的时候就开始向客户端传送数据,所以它会划出一部分缓冲区来专门向客户端传送数据(这部分的大小是由proxy_busy_buffers_size来控制的,建议为proxy_buffers中单个缓冲区大小的2倍),然后它将继续从后端取数据,缓冲区满了之后就写到磁盘的临时文件中
            proxy_temp_file_write_size 128k;
                        //代理服务器的响应过大时Nginx一次性写入临时文件的数据量,默认是proxy_buffer_size和proxy_buffers中设置的缓冲区大小的2倍,Linux下一般是8k
            proxy_temp_path /var/cache/nginx/cache_temp;
                        //当后端服务器的响应过大不能存储到配置的缓冲区域时,Nginx存储临时文件硬盘路径,目录自动新建
            proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
                        //定义缓存存储目录,目录下生成两级子目录,由 levels=1:2设置,第一层目录只有一个字符,第二层目录名字由二个字符组成,区域键值名称为cache_one(名字随意),在内存中缓存的空间大小为200MB,1天内没有被访问的缓存将自动清除(cache manager进程),最大硬盘空间缓存30GB
注:proxy_temp_path 与 proxy_cache_path 指定的路径必须在同一分区
            upstream backend_server {
                        //定义后端服务器节点,名称任意
server 192.168.1.100:80 weight=1 max_fails=2 fail_timeout=30s;
            }
            server {
                listen       80;
                                //定义服务器监听端口
                server_name  192.168.1.10;
                                //定义服务器名及监听IP
                index  index.html index.htm;
                                //Nginx首页支持页面
                location / {
                                //匹配客户端所有请求,执行如下操作
                    proxy_next_upstream http_502 http_504 error timeout invalid_header;
                                        //当后端服务器返回502、504、错误等状态码,自动跳转到upstream负载均衡池中的另一台服务器,实现故障转义
                    proxy_cache cache_one;
                                        //当前网页数据缓存到上述定义位置
                    proxy_cache_valid 200 304 12h;
                                        //针对200、304状态码缓存12小时
                    proxy_cache_key $host$uri$is_args$args;
                                        //定义缓存Key值的格式,Nginx将Key值HASH后再存储到指定的二级缓存目录(如果"levels=1"定义的是一级目录,那么就存储到一级缓存目录)中;上述Key值存储格式为(请求主机、请求的URL、如果$args设置为?,否则为空、GET请求中的参数)
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
                    proxy_pass http://backend_server;
                                        //指定跳转服务器池,名字要与upstream设定的相同,访问当前服务器自动转发请求给后端服务器
                                        expires 1d;
                                        //指定客户端浏览器缓存数据时间
                }
                location ~ /purge(/.*) {
                                //匹配所有以/purge/开头的页面请求,都将执行如下操作
                    allow 127.0.0.1;
                                        //允许本地访问该地址
                    allow 192.168.1.0/24;
                                        //允许指定2.0网段访问
                    deny all;
                                        //其余网段全部拒绝访问该地址
                    proxy_cache_purge cache_one $host$1$is_args$args;
                                        //清除缓存(cache_one为之前定义的区域键值,$1即为位置变量(不要替换为$url,那将清除整个缓存),后面为请求参数,即清除指定缓存Key)
                }
                location ~ .*\.(php|jsp|cgi)?$ {
                                //匹配所有以.php、.jsp、.cgi结尾的页面请求,都将执行如下操作
                    proxy_set_header Host $host;
                    proxy_set_header X-Forwarded-For $remote_addr;
                    proxy_pass http://backend_server;
                                        //所有为.php、.jsp、.cgi结尾的请求都将转发给后端服务器,不缓存内容(因此动态页面不需缓存,内容会随时发生改动)
                }
                                //余下配置文件自带内容可全部删除,使用dG删除
            }
        }
mkdir /var/cache/nginx                  //创建Nginx临时和缓存存储目录
nginx -t                                    //检测Nginx配置文件是否有误

注:在运行"nginx -t"命令后,当文件确认无误后,会自动在指定目录下自动新建临时、缓存目录

ulimit -SHn 65535                   //设置系统句柄数,注意单次生效
nginx                               //运行Nginx服务,结束使用"pkill nginx"
netstat -utpln | grep 80                //查看80端口是否开启

Web(Apache)

vim /etc/sysconfig/network-scripts/ifcfg-eth0
        DEVICE=eth0                             //网卡名称
        TYPE=Ethernet                           //网卡类型为以太网
        ONBOOT=yes                          //开机自启该网卡
        NM_CONTROLLED=no                        //关闭NetworkManager
        BOOTPROTO=static                        //网卡设置为静态方式
        IPADDR=192.168.1.100                    //IP地址配置
        NETMASK=255.255.255.0                   //子网掩码配置
/etc/init.d/network restart
yum -y install httpd                    //安装apache服务
echo "This is Web1">/var/www/html/index.html
//给第一台Web服务器编写测试页面
/etc/init.d/httpd start && chkconfig --level 35 httpd on
//启动httpd服务并设置为开机自启

测试

缓存测试

IE --> http://192.168.1.10(Nginx服务器IP

ls -R /var/cache/nginx/proxy_cache/
//(在Nginx缓存服务器)递归查看目录下内容,可以看见,刚才访问的页面已经缓存下来,并存储在../c/43/目录下


清除缓存

IE --> http://192.168.1.10/purge/ //手动清除页面缓存

ls -R /var/cache/nginx/proxy_cache/
//(在Nginx缓存服务器)再次验证查看缓存目录,之前缓存的页面文件被清除

原文地址:http://blog.51cto.com/13770206/2163952

时间: 2024-10-25 20:57:25

Nginx缓存加速的相关文章

Nginx代理缓存加速服务器

Nginx缓存概述 提供与Squid类似的缓存,把URL以及相关信息当成key,用MD5编码哈希后,把数据文件保存在硬盘上,并且只能为指定的URL或者状态码设置过期时间,并不支持类似 squid的purge命令来手动清除指定缓存页面,但是可以通过第三方的ngx_cache_purge来清除指定的URL缓存Nginx的缓存加速功能是由proxy_cache(用于反向代理和静态缓存)和fastcgi_cache(PHP动态缓存)两个功能模块完成 1.proxy_cache原理 2.Nginx缓存特点

varnish的缓存加速,以及动静分离,负载均衡

一个简单的拓扑如上,varnish1 上还同时开了nginx,用来做静态的http,app1和app2 是nginx+fastcgi,这个拓扑主要做的是Discuz!论坛的动静分离,以及app的负载均衡,varnish起到个反向代理和缓存加速的功能. varnish1:192.168.1.151,172.16.0.51 app1:172.16.0.52 app3:172.16.0.54 varnish 简介 varnish的缓存方式: 1.malloc,通过malloc获取内存,简单,速度. 2

php服务缓存加速

PHP服务加速缓存优化 PHP缓存原理: 当客户端请求一个PHP程序时,服务器的PHP引擎会解析改PHP程序,并将其编译为特定的操作码(Operate Code 简称 opcode), 改文件是执行PHP代码后的一种二进制表示形式.默认情况下,这个编译好的操作码文件由PHP引擎执行后丢弃.而操作码缓存的原理: 将编译后的操作码保存下来,并放到共享内存中,下一次调用PHP时重用.(节省了PHP引擎的编译时间) LA(N)MP环境PHP缓存加速器的原理: 1)apache(nginx)接收到客户端的

PHP服务缓存加速优化实战

PHP服务缓存加速优化实战: (1)操作码介绍及缓存原理: 当客户端请求一个PHP程序的时候,服务器的PHP引擎会解析该PHP程序,并将其编译为特定的操作码(Operate Code)文件. 该文件是执行PHP代码后的一种二进制表示形式. 默认情况下,这个编译好的操作码文件由PHP引擎执行后进行丢弃. 操作码文件缓存机制就是将编译还的文件保存下来,并放到共享内存中,以便于下一次调用该PHP页面的时候重用它,避免了相同的代码重复度,节省了PHP引擎重复编译的时间. 降低了服务器负载,同时减少了服务

PHP开启缓存加速

 PHP默认会将Operate Code文件丢弃,缓存加速是将其保存下来,放置共享内存中,以便在下次调用该PHP页面时重用,避免相同代码的重复编译 ___________________________________________________________ ■ LAMP环境PHP解析原理___________________________________________________________Apache接收客户的PHP程序请求,并根据规则过滤之Apache将PHP程序请求传

Nginx缓存配置以及nginx ngx_cache_purge模块的使用

web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL时,Web缓存服务器会去后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL,Web缓存服务器直接输出内容给客户端,而不是向源服务器再次发送请求.Web缓存降低了内容源Web服务器,数据库的负载,减少了网络延迟,提高了用户访问的响应速度,增强了用户体验. web缓存服务器中,最著名的要数Squid Cache(简称为Squid),Squid是一个流浪的自由软件的代理服务器和Web缓存服务器.---

WDCP,LNMP安装PHP缓存加速扩展eAccelerator,xcache和memcached

VPS主机性能配置如果太差,则在运行Wordpress博客和Discuz! 论坛等高消耗程序时能够明显感觉出VPS有些吃力.另外,即使VPS主机的CPU.内存.硬盘I/O等性能足够好,但是在面对大流量时则有可能导致PHP执行效率降低,网页打开速度变慢等不正常的情况. 为了能够在低配置的VPS主机上Web也能跑出流畅的感觉和在面对流量高峰时服务器也能从容应对大量的应该访问请求,我们一般会给PHP安装上几点缓存加速扩展:eAccelerator,xcache和memcached,优化动态内容缓存,提

PHP缓存加速插件 XCache 、 ZendOpcache 安装

PHP缓存原理 当客户端请求一个PHP程序时,服务器的PHP引擎会解析该PHP程序,并将其编译为特定的操作码(OperateCode,简称opcode)文件,该文件是PHP代码的一种二进制表示方式.默认情况下,这个编译好的操作码文件由PHP引擎执行后丢弃,而操作码缓存(Opcode Cache)的原理就是将编译后的操作码保存到共享内存,以便下一次调用相同PHP程序时重复使用该操作码,避免了相同代码的重复编译,节省了PHP引擎重复编译的时间,降低了服务器负载同时节省了CPU和内存开销,主要的缓存加

PHP服务缓存加速——xcache的安装与配置

1.PHP缓存加速器介绍 (1)操作码的介绍和加速器的原理 当客户请求一个PHP程序时,服务器的PHP引擎会解析该PHP程序,并将其编译为特定的操作码(Operate Code,简称opcode文件),该文件是执行PHP代码后的一种二进制的表示形式.默认情况下,这个编译好的的操作码文件由PHP引擎执行后丢弃.而操作码缓存(opcode cache)的原理就是将编译后的操作码报错下来,并放到共享内存里,以便在下次调用PHP页面时重用它,它避免了相同代码的重复编译,节省了PHP引擎重复编译的时间,降