使用nginx缓存服务器上静态文件的设置方法

一、nginx缓存的优点

如图所示,nginx缓存,可以在一定程度上,减少源服务器的处理请求压力。
因为静态文件(比如css,js, 图片)中,很多都是不经常更新的。nginx使用proxy_cache将用户的请求缓存到本地一个目录。下一个相同请求可以直接调取缓存文件,就不用去请求服务器了。
毕竟,IO密集型服务的处理是nginx的强项。

二、如何进行设置

先上个栗子:

http{
  proxy_connect_timeout 10;
  proxy_read_timeout 180;
  proxy_send_timeout 5;
  proxy_buffer_size 16k;
  proxy_buffers 4 32k;
  proxy_busy_buffers_size 96k;
  proxy_temp_file_write_size 96k;
  proxy_temp_path /tmp/temp_dir;
  proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache_one:100m inactive=1d max_size=10g;
  server {
    listen    80 default_server;
    server_name localhost;
    root /mnt/blog/;
    location / {
    }
    #要缓存文件的后缀,可以在以下设置。
    location ~ .*\.(gif|jpg|png|css|js)(.*) {
        proxy_pass http://ip地址:90;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_cache cache_one;
        proxy_cache_valid 200 302 24h;
        proxy_cache_valid 301 30d;
        proxy_cache_valid any 5m;
        expires 90d;
        add_header wall "hey!guys!give me a star.";
    }
  }
  # 无nginx缓存的blog端口
  server {
    listen 90;
    server_name localhost;
    root /mnt/blog/;
    location / {
    }
  }
}

因为我是在一台服务器上做试验,所以用了两个端口80和90进行模拟两台服务器之间的交互。

80端口对接的是普通的域名(http://wangxiaokai.vip)访问。
90端口负责处理80端口代理过来的资源访问。
相当于90端口是源服务器,80端口是nginx反向缓存代理服务器。

接下来讲一下配置项:

2.1 http层设置

 proxy_connect_timeout 10;
  proxy_read_timeout 180;
  proxy_send_timeout 5;
  proxy_buffer_size 16k;
  proxy_buffers 4 32k;
  proxy_busy_buffers_size 96k;
  proxy_temp_file_write_size 96k;
  proxy_temp_path /tmp/temp_dir;
  proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache_one:100m inactive=1d max_size=10g;
  • proxy_connect_timeout 服务器连接的超时时间
  • proxy_read_timeout 连接成功后,等候后端服务器响应时间
  • proxy_send_timeout 后端服务器数据回传时间
  • proxy_buffer_size 缓冲区的大小
  • proxy_buffers 每个连接设置缓冲区的数量为number,每块缓冲区的大小为size
  • proxy_busy_buffers_size 开启缓冲响应的功能以后,在没有读到全部响应的情况下,写缓冲到达一定大小时,nginx一定会向客户端发送响应,直到缓冲小于此值。
  • proxy_temp_file_write_size 设置nginx每次写数据到临时文件的size(大小)限制
  • proxy_temp_path 从后端服务器接收的临时文件的存放路径
  • proxy_cache_path 设置缓存的路径和其他参数。被缓存的数据如果在inactive参数(当前为1天)指定的时间内未被访问,就会被从缓存中移除

2.2 server层设置

2.2.1 反向缓存代理服务器

server {
    listen    80 default_server;
    server_name localhost;
    root /mnt/blog/;
    location / {
    }
    #要缓存文件的后缀,可以在以下设置。
    location ~ .*\.(gif|jpg|png|css|js)(.*) {
        proxy_pass http://ip地址:90;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_cache cache_one;
        proxy_cache_valid 200 302 24h;
        proxy_cache_valid 301 30d;
        proxy_cache_valid any 5m;
        expires 90d;
        add_header wall "hey!guys!give me a star.";
    }
  }
  • proxy_pass nginx缓存里拿不到资源,向该地址转发请求,拿到新的资源,并进行缓存
  • proxy_redirect 设置后端服务器“Location”响应头和“Refresh”响应头的替换文本
  • proxy_set_header 允许重新定义或者添加发往后端服务器的请求头
  • proxy_cache 指定用于页面缓存的共享内存,对应http层设置的keys_zone
  • proxy_cache_valid 为不同的响应状态码设置不同的缓存时间
  • expires 缓存时间

这里我设置了图片、css、js静态资源进行缓存。
当用户输入http://wangxiaokai.vip域名时,解析得到ip:port的访问地址。port默认为80。所以页面请求会被当前server截取到,进行请求处理。

当解析到上述文件名结尾的静态资源,会到缓存区获取静态资源。

如果获取到对应资源,则直接返回数据。

如果获取不到,则将请求转发给proxy_pass指向的地址进行处理。

2.2.2 源服务器

server {
    listen 90;
    server_name localhost;
    root /mnt/blog/;
    location / {
    }
  }

这里直接处理90端口接受到的请求,到服务器本地目录/mnt/blog下抓取资源进行响应。

三、如何验证缓存是否有效

细心的读者应该发现,我在第二段栗子里,留了个彩蛋 add_header wall "hey!guys!give me a star."。
add_header是用于在报头设置自定义的信息。
所以,如果缓存有效的话,那么静态资源返回的报头,一定会带上这个信息。

访问http://wangxiaokai.vip结果如下:

(0)

相关推荐

  • Nginx静态文件响应POST请求 提示405错误的解决方法

    例1:用linux下的curl命令发送POST请求给Apache服务器上的HTML静态页 复制代码 代码如下: [root@localhost ~]# curl -d 11=1 http://www.jb51.net/index.html    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">   <HTML>       <HEAD>           <TITLE>405 Meth

  • 使用Nginx作缓存服务器以及删除其缓存文件的方法

    使用nginx做cache服务器 需求就是缓存android的软件包,后缀名是apk.话不多说,直接上配置,供参考: a-->nginx.conf user www www; worker_processes 8; error_log /data/logs/nginx_error.log crit; pid /usr/local/nginx/nginx.pid; worker_rlimit_nofile 204800; events { use epoll; worker_connections

  • Nginx缓存Cache的配置方案以及相关内存占用问题解决

    nginx缓存cache的5种方案 1.传统缓存之一(404) 这个办法是把nginx的404错误定向到后端,然后用proxy_store把后端返回的页面保存. 配置: location / { root /home/html/;#主目录 expires 1d;#网页的过期时间 error_page 404 =200 /fetch$request_uri;#404定向到/fetch目录下 } location /fetch/ {#404定向到这里 internal;#指明这个目录不能在外部直接访

  • Nginx上传文件全部缓存解决方案

    下面通过文字说明给大家详解Nginx上传文件全部缓存解决方案. 因为应用服务器(Jetty)里面实现了上传时写了进度条.经过缓存.就没法读取到进度了.此外,在Nginx处缓存文件,也降低了传输效率. nginx采用1.5.6. 后端采用nodejs+formidable的方式接受上传文件,本问题的对应与采用什么样的后端没太大关系,这里只是交代一下. 问题: 在前端页面上将文件上传,nginx没有将每一块收到的文件数据块转发给后端,而是全部缓存了下来,全部收取完成后再一块一块的转发给后端,显而易见

  • Nginx 反向代理并缓存及缓存清除的方法

    本文介绍了Nginx 反向代理并缓存及缓存清除的方法,分享给大家,具体如下: 一. Nginx 配置 #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { log_form

  • nginx配置静态文件服务器详解

    本文主要介绍一些Nginx做图片服务器的简单配置,但不包括Nginx的安装部署以及实现原理. 配置步骤 下载nginx Windows nginx安装教程及简单实践 配置nginx\nginx-1.13.4\conf\nginx.conf文件 #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #

  • nginx win32 版本静态文件测试 (Windows环境)

    下载了 Nginx For Win32 的官方版本 nginx 0.7.53 进行了试用以及压力测试. 安装使用方式很简单,直接贴官方的方式: Win32 Binaries As of 0.7.52, Nginx is now available as an official Windows binary. Installation: cd c:\ unzip nginx-0.7.52.zip ren nginx-0.7.52 nginx cd nginx start nginx Control

  • Python的Flask框架及Nginx实现静态文件访问限制功能

    Nginx配置 Ngnix,一个高性能的web服务器,毫无疑问它是当下的宠儿.卓越的性能,灵活可扩展,在服务器领域里攻城拔寨,征战天下. 静态文件对于大多数website是不可或缺的一部分.使用Nginx来处理静态文件也是常见的方式.然而,一些静态文件,我们并不像任何情况下都公开给任何用户.例如一些提供给用户下载的文件,一些用户上传的涉及用户隐私的图片等.我们我希望用户登录的情况下可以访问,未登录的用户则不可见. 粗略的处理,在后端程序可以做过滤,渲染页面的时候,在视图逻辑里面验证用户登录,然后

  • 如何在nginx中配置缓存静态文件

    这篇教程说明你应该怎样配置 nginx.设置 HTTP 头部过期时间,用 Cache-Control 中的 max-age 标记为静态文件(比如图片. CSS 和 Javascript 文件)设置一个时间,这样用户的浏览器就会缓存这些文件.这样能节省带宽,并且在访问你的网站时会显得更快些(如果用户第二次访问你的网站,将会使用浏览器缓存中的静态文件). 1.准备事项 我想你需要一个正常工作的 nginx 软件,就像这篇教程里展示的:在Ubuntu 16.04 LTS 上安装 Nginx,PHP 7

  • 使用nginx缓存服务器上静态文件的设置方法

    一.nginx缓存的优点 如图所示,nginx缓存,可以在一定程度上,减少源服务器的处理请求压力. 因为静态文件(比如css,js, 图片)中,很多都是不经常更新的.nginx使用proxy_cache将用户的请求缓存到本地一个目录.下一个相同请求可以直接调取缓存文件,就不用去请求服务器了. 毕竟,IO密集型服务的处理是nginx的强项. 二.如何进行设置 先上个栗子: http{ proxy_connect_timeout 10; proxy_read_timeout 180; proxy_s

  • Java实现ftp上传下载、删除文件及在ftp服务器上传文件夹的方法

    一个JAVA 实现FTP功能的代码,包括了服务器的设置模块,并包括有上传文件至FTP的通用方法.下载文件的通用方法以及删除文件.在ftp服务器上传文件夹.检测文件夹是否存在等,里面的有些代码对编写JAVA文件上传或许有参考价值,Java FTP主文件代码: package ftpDemo; import java.io.DataOutputStream; import java.io.InputStream; import java.io.OutputStream; import sun.net

  • JS FormData上传文件的设置方法

    使用FormData上传文件时,总是获取不到req.file对象.发现是没有配置对FormData导致. 这里我是在vue中使用axios发送的请求,配置代码如下.重点地方给出注释 <form id="uploadform" method="POST" enctype="multipart/form-data" :action="postImgApi" ref="uploadform"> <

  • SpringMVC跨服务器上传文件中出现405错误的解决

    目录 SpringMVC跨服务器上传文件中出现405错误 重点来了~ SpringMVC跨服务器上传文件中出现405错误 下面是 应用服务器 的代码 package com.itheima.controller; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.WebResource; import org.apache.commons.fileupload.FileItem; import or

  • golang实现http服务器处理静态文件示例

    本文实例讲述了golang实现http服务器处理静态文件的方法.分享给大家供大家参考,具体如下: 新版本更精简: 复制代码 代码如下: package main import (     "flag"     "log"     "net/http"     "os"     "io"     "path"     "strconv" ) var dir string

  • JSP实现从不同服务器上下载文件的方法

    本文实例讲述了JSP实现从不同服务器上下载文件的方法.分享给大家供大家参考,具体如下: 最近在项目当中遇到模板下载的问题:当服务器为Tomcat的时候文件可以正常下载,但是当放到线上(WebLogic服务器)下载的模板为空,现记录下解决办法. public void importSuccess() throws Exception { try { HttpServletResponse response = Struts2Utils.getResponse(); // 重置响应 response

  • 使用scp获取远程linux服务器上的文件 linux远程拷贝文件

    一.scp是什么? scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下速度. 二.scp有什么用? 1.我们需要获得远程服务器上的某个文件,远程服务器既没有配置ftp服务器,没有开启web服务器,也没有做共享,无法通过常规途径获得文件时,只需要通过scp命令便可轻松的达到目的. 2.我们需要将本机上的文件上传到远程服务器上,远程服务器没有开启ftp服务器或共享,无

  • python 读取Linux服务器上的文件方法

    使用Python语句,读取Linux远端服务器上的文件打印到控制台的代码实现: 下载包:paramiko import paramiko #服务器信息,主机名(IP地址).端口号.用户名及密码 hostname = "" port = 22 username = "" password = "" client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.Au

  • java模拟客户端向服务器上传文件

    本文实例为大家分享了java客户端向服务器上传文件的具体代码,供大家参考,具体内容如下 先来了解一下客户端与服务器Tcp通信的基本步骤: 服务器端先启动,然后启动客户端向服务器端发送数据. 服务器端收到客户端发送的数据,服务器端会响应应客户端,向客户端发送响应结果. 客户端读取服务器发送的数据 文件上传步骤: 客户端使用本地字节输入流,指定上传数据的数据源. 客户端使用网络字节输出流,把读取的本地文件上传到服务器. 服务器使用网络字节输入流,读取客户端上传的文件. 服务器使用本地字节输出流,把读

  • Python通过paramiko远程下载Linux服务器上的文件实例

    如下所示: #!/usr/local/bin/python # encoding:utf-8 import paramiko import os HOST_IP='59.110.12.72' REMOTE_PATH='/proc' REMOTE_FILENAME='meminfo' LOCAL_PATH='./proc' USERNAME='niu' PASSWORD='123456' def remote_scp(host_ip,remote_path,local_path,file_name

随机推荐