我近期对服务器进行了少量改进,虽然之前使用了nginx反向代理之后性能有所提高,但仍然不够,需要使用缓存来大幅度提高静态资源的访问速度.

服务器上的静态资源主要有这些:png, jpg, svg, js, css等.下面,我通过新的nginx配置来实现缓存.对红色的字我会额外进行说明.

worker_processes  1;

events {
worker_connections 1024;
multi_accept on;
use epoll;
} http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
proxy_cache_path /svcwork/nginxcache levels=1:2 keys_zone=staticcache:10m inactive=1h max_size=2g;
server {
listen 80;
server_name localhost;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:8080/;
}
location ^~ /resource {
alias /resource;
expires 1h;
}
location ^~ /hpaasvc {
rewrite ^(.*)$ https://$host$1 permanent;
}
location ~* \.(js|css|ico|gif|jpg|png|svg)$ {
log_not_found off;
access_log off;
expires 7d;
proxy_pass http://localhost:8080;
proxy_cache staticcache;
proxy_cache_valid any 10m;
}
}
server {
listen 443 ssl;
server_name localhost;
ssl_certificate cert/cert.pem;
ssl_certificate_key cert/cert.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:8080/;
}
location ^~ /resource {
alias /resource;
expires 1h;
}
location ~* \.(js|css|ico|gif|jpg|png|svg)$ {
log_not_found off;
access_log off;
expires 7d;
proxy_pass http://localhost:8080;
proxy_cache staticcache;
proxy_cache_valid any 10m;
}
}
}

1, "multi_accept on"和"use epoll"可以提高服务器吞吐量

2, "proxy_cache_path /svcwork/nginxcache levels=1:2 keys_zone=staticcache:10m inactive=1h max_size=2g;"配置了一个服务器缓存,被缓存的服务器响应(不一定是文件,也有可能是302,304之类的响应)存放在/svcwork/nginxcache目录下;而且将根据被缓存响应的md5摘要信息创建两级目录(一般来说一个目录下存放过多的文件会导致文件系统访问性能的下降);缓存的名字叫staticcache,后面会用到这个名字;缓存使用10M内存(我看别人的范例上是100M,所以一开始我也配置了100M,但发现内存不足,nginx报错,所以就改小了许多);如果没有新的动作,被缓存的响应的将会在1个小时候被删除;缓存区最多可使用2G的磁盘空间.

3, location后面加上"^~"表示一旦匹配的话将不会匹配正则表达式. 如果用户要访问的URI是"/resource/test/abc.png",那么将使用"location ^~ /resource"规则,忽略掉后面的正则表达式匹配.

4, access_log off; 其实我觉得access_log意义不大.

5, expires 7d;这玩意儿其实是客户端缓存,通过http头告诉浏览器这个访问的资源的有效期是7天,7天内可以别再向服务器要,但这个取决于浏览器的具体实现,如IE按<F5>,就会强制向服务器刷新所有资源而不管是否有缓存.

6, proxy_cache staticcache;指定要使用的缓存.嗯,就是前面定义的那个staticcache.

7, proxy_cache_valid any 10m;10分钟后访问的数据将会"变不新鲜"...怎么说呢?举个栗子: /website/image/abc.png被首次访问的话讲会被缓存,接下去10分钟里对这个资源的访问都直接从缓存返回而不会将请求pass到后台.10分钟后再重新尝试从后台拿. 注意一下跟"proxy_cache_path"的"inactive"的差别,inactive是说缓存的响应的"生命时间",每次访问这个资源都将刷新缓存的"生命时间",让它继续活在缓存中,而这里则表示隔了这么长时间就重新刷新下这个被缓存的响应.

本文写得有点仓促潦草,有问题再说了...

HappyAA服务器部署笔记2(nginx的静态资源缓存配置)的更多相关文章

  1. HappyAA服务器部署笔记1(nginx+tomcat的安装与配置)

    这是本人的服务器部署笔记.文章名称叫"部署笔记1"的原因是之后我对这个进行了改进之后,会有"部署笔记2","部署笔记3"...循序渐进,估计 ...

  2. 关于linux下部署JavaWeb项目,nginx负责静态资源访问,tomcat负责处理动态请求的nginx配置

    1.项目的运行环境 linux版本 [root@localhost ~]# cat /proc/version Linux version -.el6.x86_64 (mockbuild@x86-.b ...

  3. nginx处理静态资源的配置

    修改nginx.conf文件,用于nginx处理静态资源. 主要配置如下(在server配置中加入location配置即可): server { listen 80; server_name 123. ...

  4. Nginx 静态资源缓存配置

    示例 # Media: images, icons, video, audio, HTC location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|m ...

  5. Nginx的静态资源缓存以及压缩

    Nginx是一款轻量级的网页服务器.反向代理器以及电子邮件代理服务器.Nginx采用的是异步非阻塞的通信机制(epoll模型),支持更大的并发连接.所谓的epoll模型:当事件没有准备好时,就放入ep ...

  6. nginx 作为静态资源web服务

    Nginx作为静态资源web服务 静态资源web服务-CDN场景 Nginx资源存储中心会把静态资源分发给“北京Nginx”,“湖南Nginx”,“山东Nginx”. 然后北京User发送静态资源请求 ...

  7. 云服务器部署Python项目(nginx+uwsgi+mysql+项目)

    python项目部署到云服务器 关注公众号"轻松学编程"了解更多. 一.硬件准备 云服务器,系统ubuntu_16_04 . 注意:要在安全组中开放Http的80端口. 二.软件准 ...

  8. linux使用Nginx搭建静态资源服务器

    最近公司需要做一个宣传片播放  视频有点大 好几百M 就想到使用Nginx来代理静态资源,在过程中出现了一些问题,比如端口没开.访问是403等,没有成功,后面慢慢查找问题,才发现大部分博客资料的都不全 ...

  9. 二.Nginx反向代理和静态资源服务配置

    2018年03月31日 10:30:12 麦洛_ 阅读数:1362更多 所属专栏: nginx   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/M ...

随机推荐

  1. 11.Object方法

    综述 Object是Java中所有类的父类,对它的学习十分的重要, Object的函数除了final方法,基本上都是被设计为要被覆盖的(Override),这节我们就一起来学习这些函数. 1.equa ...

  2. Java 反射调用动态方法

    package com.pigetest.util; import java.lang.reflect.Method; public class PrivateMethodTestHelper { p ...

  3. vue2.0有哪些变化

    vue2.0之后有哪些变化: 1.每个组件模板template,不再支持片段代码 之前: <template> <h3>vue-router+vue-loader</h3 ...

  4. linux中redis的主从

    主从模式的概念请自行百度! 主服务器只执行写操作.从服务器执行读操作. 主服务器中的数据会同步到从服务器中. 在从服务器中打开redis目录中的redis.conf文件 vim /usr/local/ ...

  5. Javascript 构造函数原型继承机制

    我们先聊聊Js的历史,1994年Netscape公司发布了Navigator浏览器0.9班.这是历史上第一个比较成熟的网络浏览器.轰动一时.但是,这个版本的浏览器只能用来浏览,不具备交互功能,最主要的 ...

  6. http错误代码含义中英文对照

    Http错误代码含义中文 概要当用户试图通过 HTTP 或文件传输协议 (FTP) 访问一台正在运行 Internet 信息服务 (IIS) 的服务器上的内容时,IIS 返回一个表示该请求的状态的数字 ...

  7. CompiledEffect Direct3D9 Sample fxc.exe

  8. rake deploy ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to解决方法

    需要修改项目中Rakefile文件的内容: 原始内容:system "git push origin #{deploy_branch}" 改后内容:system "git ...

  9. iMetro

    body { background:#FFFFFF url("http://images.cnblogs.com/cnblogs_com/mookmark/745172/o_8.jpg&qu ...

  10. svn客户端重新设置用户名和密码

    在第一次使用TortoiseSVN从服务器CheckOut的时候,会要求输入用户名和密码,这时输入框下面有个选项是保存认证信息,如果选了这个选项,那么以后就不用每次都输入一遍用户名密码了. 不过,如果 ...