c++tcp接收文件缓存多大合适_缓存及加速04Nginx缓存加速

本文介绍如何利用Nginx实现网站访问的缓存加速,包括安装配置Nginx缓存服务器、设置缓存策略及缓存清理方法。通过实际案例展示了Nginx缓存加速的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

缓存及加速04-Nginx缓存加速

、Nginx缓存加速概述

1、Nginx支持类似Squid的缓存功能

       把URL以及相关信息当成key,用MD5编码哈希后,把数据文件保存在硬盘上。只能为指定的URL或者状态码设置过期时间,并不支持类似squid的purge命令来手动清除指定缓存页面。

       可通过第三方的ngx_cache_purge来清除指定的URL缓存。

       Nginx的缓存加速功能是由proxy_cache和fastcgi_cache两个功能模块完成的。

2、Nginx缓存加速特点

       缓存功能也十分稳定,运行速度不逊于squid,对多核CPU的利用率比其他的开源软件也要好,支持高并发请求数,能同时承受更多的访问请求。

二、Nginx缓存加速案例

0b8761da84621ac6224276e713402adc.png

       本案例通过Nginx的代理功能实现对后端网站访问的缓存加速,实验环境如下:

nginx:192.168.2.11/24       pcre nginx ngx_cache_purge

web:192.168.2.12/24              httpd

1、安装配置Nginx缓存服务器

[root@nginx ~]# useradd -M -s /sbin/nologin nginx

[root@nginx ~]# yum -y install pcre-devel zlib-devel              //nginx rewrite、正则表达功能依赖于pcre库

[root@nginx ~]# tar xf ngx_cache_purge-2.1.tar.gz -C /usr/src/

[root@nginx ~]# tar xf nginx-1.6.0.tar.gz -C /usr/src/

[root@nginx ~]# cd /usr/src/nginx-1.6.0/

[root@nginx nginx-1.6.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-pcre --add-module=/usr/src/ngx_cache_purge-2.1/

make && make install

[root@nginx nginx-1.6.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

[root@nginx nginx-1.6.0]# cd /usr/local/nginx/conf/

[root@nginx conf]# vim nginx.conf

# 以nginx用户和组运行

user  nginx nginx;

# 启动进程数,根据物理CPU个数设置

worker_processes  1;

# 定义错误日志,级别为crit

error_log  logs/error.log  crit;

pid        logs/nginx.pid;

# 打开文件的最大句柄数,最好与ulimit -n的值保持一致,使用ulimit -SHn 进行设置

worker_rlimit_nofile 65535;

events {

# Nginx 使用了最新的epoll网络I/O模型

    use epoll;

# 每个工作进程允许最大的同时连接数

    worker_connections  65535;

}

http {

# mime.types 内定义各文件类型映像

    include       mime.types;

# 设置默认类型是二进制流,若没有设置,比如加载PHP时,是不预解析,用浏览器访问则出现下载窗口

    default_type  application/octet-stream;

       charset utf-8

# 打开系统函数sendfile(),支持下载

    sendfile        on;

# 只有先打开Linux下的tcp_cork,sendfile打开时才有效

    tcp_nopush     on;

# 会话保持时间,设置的低一些可以让nginx持续工作的时间更长

    keepalive_timeout  60;

# 不要缓存数据,而是一段一段的发送——当需要及时发送数据时,就应该设置这个属性,这样发送一小块数据信息时就不能立即得到返回值

       tcp_nodelay on;

# 指定连接请求实体的缓存大小

    client_body_buffer_size 512k;

# 代理连接超时时间,单位秒

    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 /var/cache/nginx/cache_temp;

# 代理缓存存放路径,第一层目录只有一个字符,是由levels=1:2设置,总共二层目录,子目录名字由二个字符组成,键值名称为cache_one(名字随意),在内存中缓存的空间大小为200MB,1天内没有被访问的缓存将自动清除,硬盘缓存空间为30GB

proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;

# 注:proxy_temp_path与proxy_cache_path指定的路径必须在同一分区

    upstream backend_server {

# 上游服务器节点,权重1(数字越大权重越大),30秒内访问失败次数大于等于2次,将在30秒内停止访问此节点,30秒后计数器清零,可以重新访问。

       server 192.168.2.12:80 weight=1 max_fails=2 fail_timeout=30s;

    }

    server {

        listen       80;

        server_name  www.amber.com 192.168.2.11;

        index  index.html index.htm;

        location / {

# 如果后端服务器返回502、504、错误等错误,自动跳转到upstream负载均衡池中的另一台服务器,实现故障转义

           proxy_next_upstream http_502 http_504 error timeout invalid_header;

           proxy_cache cache_one;

# 对不同的HTTP状态码设置不同的缓存时间

           proxy_cache_valid 200 304 12h;

# 以域名、URI、参数组合成Web缓存的Key值,nginx根据Key值哈希,存储缓存内容到二级缓存目录内

           proxy_cache_key $host$uri$is_args$args;

           proxy_set_header Host $host;

           proxy_set_header X-Forwarded-For $remote_addr;

# 指定跳转服务器池,名字要与upstream设定的相同

           proxy_pass http://backend_server;

           expires 1d;

        }

# 用于清除缓存

       location ~ /purge(/.*) {

# 设置允许清除缓存的主机IP或网段

           allow 127.0.0.1;

           allow 192.168.2.0/24;

           deny all;

           proxy_cache_purge cache_one $host$1$is_args$args;

       }

# 扩展名以php、jsp、cgi结尾的动态应用程序不缓存

       location ~ .*\.(php|jsp|cgi)?$ {

               proxy_set_header Host $host;

            proxy_set_header X-Forwarded-For $remote_addr;

            proxy_pass http://backend_server;

       }

       access_log off;

    }

}

[root@nginx conf]# mkdir /var/cache/nginx

[root@nginx conf]# ulimit -SHn 65535

[root@nginx conf]# nginx -t              //此时会自动生成两个缓存目录,属组为nginx

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

[root@nginx conf]# ll /var/cache/nginx/

总用量 8

drwx------ 2 nginx root 4096 6月   2 22:36 cache_temp

drwx------ 2 nginx root 4096 6月   2 22:36 proxy_cache

[root@nginx ~]# nginx

[root@nginx ~]# netstat -anpt |grep 80

tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      4656/nginx    

2、安装Web服务器,建立测试页

[root@web ~]# yum -y install httpd

[root@web ~]# sed -n '276p' /etc/httpd/conf/httpd.conf

#ServerName www.example.com:80

[root@web ~]# sed -i '276 s/#//' /etc/httpd/conf/httpd.conf

[root@web ~]# /etc/init.d/httpd start

正在启动 httpd:                                           [确定]

[root@web ~]# netstat -anpt |grep 80

tcp        0      0 :::80                       :::*                        LISTEN      1289/httpd 

[root@web ~]# echo 111 > /var/www/html/index.html

3、测试Nginx缓存服务器

[root@nginx ~]# ll /var/cache/nginx/proxy_cache/

总用量 0

http://192.168.2.11/index.html

a4a313cbd9124b200c331ee61968b193.png

[root@nginx ~]# ll /var/cache/nginx/proxy_cache/

总用量 4

drwx------ 3 nginx nginx 4096 6月   2 23:00 7

[root@nginx ~]# ls /var/cache/nginx/proxy_cache/7/e0/

3a8d06ff9a604644fa5e1e3d172b1e07

测试删除缓存文件:

http://192.168.2.11/purge/index.html

38bc3ef0dd1faf6a28576e86a343c579.png

[root@nginx ~]# ls /var/cache/nginx/proxy_cache/7/e0/

[root@nginx ~]#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值