Nginx作为静态资源


一.静态资源类型

静态资源配置

已有配置:

server {
listen       80;
server_name  192.168.0.77;

sendfile on;
#charset koi8-r;
access_log  /var/log/nginx/err.log  main;

location = / {
#proxy_pass http://localhost:8080   //将Nginx的所有请求都转发给http://localhost:8880
}   
}  

配置静态资源服务器,把一部分请求分离出来,让这些请求直接访问到服务器的磁盘目录中
例:

location /image/ {
        root   /usr/local/static/;
        autoindex on;
    }
  表示输入 192.168.0.77/image/时会访问本机的/usr/local/static/image/ 目录。  

语法规则:
location [=|~|~*|^~] /uri/ { … }

* 

= 开头表示精确匹配

* 

^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。

* 

~ 开头表示区分大小写的正则匹配

* 

~* 开头表示不区分大小写的正则匹配

* 

!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则

* 

/ 通用匹配,任何请求都会匹配到。

多个location配置的情况下匹配顺序为:首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

例:

server {
listen       80;
server_name  192.168.0.77;

sendfile on;
#charset koi8-r;
access_log  /var/log/nginx/log/static_access.log  main;


location ~ .*\.(jpg|gif|png)$ {
    gzip on;  //开启压缩
    gzip_http_version 1.1;
    gzip_comp_level 2;  //压缩比
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;  //压缩类型
    root  /opt/app/code/images;
}

location ~ .*\.(txt|xml)$ {
    gzip on;
    gzip_http_version 1.1;
    gzip_comp_level 1;
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    root  /opt/app/code/doc;
}

location ~ ^/download {
    gzip_static on;   //压缩预读  需要源文件本地压缩
    tcp_nopush on;
    root /opt/app/code;
}  

二. 浏览器缓存

作用:提升用户体验,减少服务器压力


2.1 浏览器缓存原理

当浏览器无缓存:浏览器发起请求->无缓存->请求WEB服务器->web服务器检查是否有更新(没有更新返回304)->呈现

浏览器有缓存:浏览器发起请求->有缓存->检验过期->web服务器检查是否有更新(没有更新返回304)->呈现


2.2nginx缓存配置

这里我配置在server标签中location外,也就是说对server的所有资源进行缓存,如果是设置行指定location中那么是对指定的location资源进行缓存

root@Nginx ~]# vim /etc/nginx/nginx.conf
http {
server {
 expires 2h;    
 }
} 

例:


2.3测试:

A:没有缓存配置之前:响应报头中不存在cache-control缓存控制

B:开启缓存:

在响应报头中存在max-age=3600 也就是2个小时有效时间

三.防盗链

目的:防止资源盗用 减少服务器压力

nginx模块ngx_http_referer_module通常用于阻挡来源非法的域名请求

语法: valid_ referers none | blocked | server_ names | string …;
默认值: —
配置段: server, location
指定合法的来源’referer’, 他决定了内置变量$invalid_referer的值,如果referer头部包含在这个合法网址里面,这个变量被设置为0,否则设置为1.记住,不区分大小写的.


防盗链配置:

图片防盗链配置:

location ~* \.(gif|jpg|png|bmp)$ {
valid_referers none blocked 192.168.0.77 *.baidu.com *.google.com; //白名单,允许文件链出的域名白名单
if ($invalid_referer) {
    return 404;
    #rewrite ^/ http://www.ttlsa.com/403.jpg;
}
}  

valid_referers none blocked 192.168.0.77 .baidu.com .google.com;
在浏览器直接输入图片地址不会再显示图片,也不右键另存的可把none blocked去掉

测试: