nginx 静态文件配置
静态资源
非服务器动态运行生成的文件:
类型 | 种类 |
---|---|
浏览器端渲染 | HTML、CSS、JS |
图片 | JPEG、GIF、PNG |
视频 | FLV、MPEG |
文件 | TXT、任意下载文件 |
静态资源服务场景-CDN(内容分发网络):
配置语法:文件读取
语法:sendfile on | off;
默认:off
该语法在http、server、location、if in location下配置
配置语法:tcp_nopush
作用: sendfile开启的情况下,提高网络包的传输效率。
语法:tcp_nopush on | off;
默认: off
该语法在http、server、location下配置
原理:打包一次性发出去
配置语法:tcp_nodelay
作用:keepalive连接下,要求实时高的场景,提高网络包的传输实时性
语法:tcp_nodelay on | off;
默认:on;
该语法在http、server、location下配置
配置语法:压缩
作用:对静态文件压缩后在传输
语法:gzip on | off
默认:off
该语法在http、server、location、if in location下配置
注意:压缩会影响性能
配置压缩比例:
语法:gzip_comp_level level;
默认:gzip_comp_level 1;
该语法在http、server、location下配置
配置压缩版本:
语法:gzip_http_version 1.0 | 1.1
默认:gzip_http_version 1.1; (主流)
该语法在http、server、location下配置
预读gzip功能(扩展Nginx压缩模块):
模块:http_gzip_static_module
语法:gzip_static on;
作用:对压缩文件进行硬盘缓存(对硬盘大小有要求),节省CPU性能
示例
vim /etc/nginx/conf.d/static_server.conf
server {
listen 80;
server_name 116.62.103.228 jeson.imooc.com;
sendfile on; # 打开压缩功能
location ~ .*\.(jpg|gif|png)$ { # URL访问路径模式匹配
root /var/www/html/images;
gzip on;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/javaxcript application/x-javascript text/css applicaton/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
}
location ~ .*\.(txt|xml)$ { # URL访问路径模式匹配
root /var/www/html/doc;
gzip on;
gzip_http_version 1.1;
gzip_comp_level 1;
gzip_types text/plain application/javaxcript application/x-javascript text/css applicaton/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
}
location ~ ^/download { # URL访问路径模式匹配
root /var/www/html;
gzip_static on; # 需要先用gzip命令压缩静态文件后使用
tcp_nopush on;
}
}
浏览器缓存
HTTP协议定义的缓存机制(如:Expires;Cache-control等)
校验过期机制:
校验是否过期 | Expires、Cache-Control(max-age) | Expires是HTTP1.0版本头信息,少用了。浏览器会先检查Cache-Control的过期时间,如果文件失效再进行下面验证。 |
---|---|---|
协议中Etag头信息校验 | Etag | 类似于服务器文件的md5信息,判断文件是否改变,如果Etag相同,文件没有改变再进行下面的验证。 |
Last-Modified头信息校验 | Last-Modified | 记录了服务器的文件更新时间,传递给服务器后对比文件是否更新,如果文件更新时间相同,服务器传回304表示该静态文件是最新的,可以再次使用。 |
配置语法:expires
作用:给response包添加Cache-Control、Expires头
语法:expires time;
默认 expires off;
该语法在http、server、location、if in location下配置
示例
vim /etc/nginx/conf.d/static_server.conf
server {
listen 80;
server_name 116.62.103.228 jeson.imooc.com;
sendfile on; # 打开压缩功能
location ~ .*\.(htm|html)$ { # URL访问路径模式匹配
root /var/www/html;
expires 24h; # 24小时后过期
}
}
跨域访问
不安全,容易出现CSRF攻击。浏览器默认关闭了跨域访问。
作用:允许跨站访问,添加头部Access-Control-Allow-Origin
语法:add_header name value [always];
该语法在http、server、location、if in location下配置
示例
vim /etc/nginx/conf.d/static_server.conf
server {
listen 80;
server_name 116.62.103.228 jeson.imooc.com;
sendfile on; # 打开压缩功能
location ~ .*\.(htm|html)$ { # URL访问路径模式匹配
root /var/www/html;
#add_header Access-Control-Allow-Origin *; # 允许所有站点访问
add_header Access-Control-Allow-Origin http://www.jesonc.com; # 允许某个域名跨站访问
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
}
}
防盗链
作用:防止非法用户访问网站
基于http_refer防盗链配置模块
语法:valid_referers none | blocked | server_names | string ...;
该语法在server、location下配置
vim /etc/nginx/conf.d/static_server.conf
server {
listen 80;
server_name 116.62.103.228 jeson.imooc.com;
sendfile on; # 打开压缩功能
location ~ .*\.(jpg|gif|png)$ { # URL访问路径模式匹配
root /var/www/html/images;
# 匹配referers,匹配没有信息(none)、信息不规范(blocked)、ip地址、域名正则
# 匹配成功设置invalid_referer变量为0,没有匹配成功为1
valid_referers none blocked 116.62.103.228 ~/google\./;
if ($invalid_referer) { # 没有匹配到的返回403;
return 403;
}
}
}